本文目錄一覽:
- 1、Python文件操作,看這篇就足夠!
- 2、python 文件的打開與讀寫
- 3、python如何打開文檔查看內容
- 4、python對文件的獨操作有哪幾種?請詳細說明每種方法
- 5、python操作文本文件
- 6、python對文本文件的讀有哪些方法,寫有哪些方法?
Python文件操作,看這篇就足夠!
文件的存儲方式
在計算機中,文件是以二進制的方式保存在磁盤上的文本文件和二進制文件
文本文件可以使用文本編輯軟件查看本質上還是二進制文件
二進制文件保存的內容不是給人直接閱讀的,而是提供給其她軟件使用的二進制文件不能使用文件編輯軟件查看
文件基本操作
在計算機中要操作文件一共包含三個步驟:1.打開文件2.讀、寫文件
讀 將文件內容讀入內容寫 將內存內容寫入文件
模式描述
t文本模式 (默認)。
x寫模式,新建一個文件,如果該文件已存在則會報錯。
b二進制模式。
+打開一個文件進行更新(可讀可寫)。
U通用換行模式(不推薦)。
r以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。
rb以二進制格式打開一個文件用於只讀。文件指針將會放在文件的開頭。這是默認模式。一般用於非文本文件如圖片等。
r+打開一個文件用於讀寫。文件指針將會放在文件的開頭。
rb+以二進制格式打開一個文件用於讀寫。文件指針將會放在文件的開頭。一般用於非文本文件如圖片等。
w打開一個文件只用於寫入。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。
wb以二進制格式打開一個文件只用於寫入。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。一般用於非文本文件如圖片等。
w+打開一個文件用於讀寫。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。
wb+以二進制格式打開一個文件用於讀寫。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。一般用於非文本文件如圖片等。
a打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該文件不存在,創建新文件進行寫入。
ab以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該文件不存在,創建新文件進行寫入。
a+打開一個文件用於讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創建新文件用於讀寫。
ab+以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。如果該文件不存在,創建新文件用於讀寫。
文件打開模式有很多,但是我們實際用到的就只有六種。
我們總結一下主要用到的是下面六種
模式可做操作若文件不存在是否覆蓋文件原來內容
r只讀報錯——
r+可讀、可寫報錯是
w只寫創建是
w+可讀、可寫創建是
a只寫創建否,追加寫
a+可讀、可寫創建否,追加寫
只讀模式打開文件——只讀(r)
文件若不存在報錯:
讀寫模式打開文件——讀寫模式(r+)
數據寫入之前:
數據寫入之後:
會替換掉相同長度的內容
文件若不存在報錯:
寫模式打開文件——寫模式(w)
數據寫入之前:
數據寫入之後:
這種操作會刪除原來的文件內容,重新寫入Python,
並且把光標放在文件最開始。
若文件不存在,系統會創建該文件夾並重新寫入內容
讀寫模式打開文件——讀寫模式(w+)
數據寫入之前:
數據寫入之後:
這種操作會刪除原來的文件內容,重新寫入Python,
並且把光標放在文件最開始。
若文件不存在,系統會創建該文件夾並重新寫入內容
利用這個原理所以文件寫模式(w)、讀寫模式(w+)還可以用作刪除文件內容。
因為他們整個工作原理就是把文件原來的內容刪除,然後寫入新的內容。
如果我們寫入的內容為空,那麼不就是刪除文件內容。
數據寫入之前:
數據寫入之後:
寫模式打開文件(追加內容)——寫模式(a)
數據寫入之前:
數據寫入之後:
可以看到是在原先內容的基礎上在文末追加新的內容!
若文件不存在,系統會創建新的文件夾並寫入內容
讀寫模式打開文件(追加內容)——讀寫模式(a)
數據寫入之前:
數據寫入之後:
可以看到是在原先內容的基礎上在文末追加新的內容!
若文件不存在,系統會創建新的文件夾並寫入內容
二進制模式打開文件
我們看到了在文件打開模式中有以下模式:rb、wb……有這種帶 b 的。
什麼意思呢?
就是用二進制的方式打開文件。
很明顯,我們出現了以下錯誤:
主要原因是因為編碼的問題,可能是因為0x82這個位元組在gbk編碼中沒有這個字符,
可能原字符是兩個位元組,在gbk里被解析成了一個位元組,導致字符不存在。
這就是我們文件打開方式需要使用二進制讀取的原因。
文件操作
open 函數負責打開文件,並且返迴文件對象
read /write / close 三個方法都需要通過文件對象 來調用
文件和文件夾的操作
在Python中⽂件和⽂件夾的操作要藉助os模塊⾥⾯的相關功能,
具體步驟如下:
導⼊os模塊
使⽤ os 模塊相關功能
1、文件重命名
2、刪除文件
3、創建文件夾
4、刪除文件夾
5、獲取當前目錄
6、改變默認目錄
7、獲取目錄列表
python 文件的打開與讀寫
/python通過解釋器內置的open()函數打開一個文件,並實現該文件與一個程序變量的關聯,open()函數格式如下:
/open()函數包含有兩個參數:文件名和打開模式.當文件與執行文件在同一文件夾中,直接輸入文件名,亦可輸入文件的完整路徑.打開模式是指以何種方式打開文件,python提供了7種打開模式.
/r/w/x/a模式與b/t/+模式可以組合使用,比如’rt’為文本只讀.’rb’為二級制只讀.
/文件使用結束後,需要使用close()關閉文件使用權限,釋放內存.
/當文件使用文本格式打開時,讀寫按照字符串方式,採用計算機當前編碼或指定編碼.
/當文件以二進制方式打開時,讀寫按照位元組流方式.
/python本身將文件讀取為一個行序列.
python如何打開文檔查看內容
方法一:使用最基本的open函數進行讀取打開;
方法二:使用pandas的read_table方法進行讀取,pandas是python的一個數據處理的包,功能很強大,提供了許多現成的讀取各種文件的方法,像csv文件的read_csv方法,excel文件的read_excel方法等
python對文件的獨操作有哪幾種?請詳細說明每種方法
1.打開文件:
f=open(r’E:\PythonProjects\test7\a.txt’,mode=’rt’,encoding=’utf-8′)
以上三個單引號內分別表示:要打開的文件的路徑,mode為文件打開方式具體介紹在下文,encoding為文件的字符編碼,一般默認為utf-8
2.讀寫文件:
data=f.read() # 讀文件
f.write() # 寫文件
3.關閉文件:
f.close()
4.為了簡便,一般採用上下文的方法進行文件操作,可不用關閉文件
with open(‘a.txt’,mode=’rt’,encoding=’utf-8′) as f:
data=f.read()
print(data)
with open(‘a.txt’,mode=’wt’,encoding=’utf-8′) as f:
f.write(‘hello world’)
5.控制文件讀寫的操作:
r:(默認模式):只讀:以該模式打開文件時,若文件不存在則報錯,若文件存在,則文件指針在文件開頭,即從文件開頭開始讀文件
w:只寫:以該模式打開文件時,若文件不存在則創建一個文件,如文件存在,則清空文件內容,文件指針移到開頭
a:追加寫:以該模式打開文件時,若文件不存在則創建一個文件,如文件存在,則將文件指針移到文件末尾,在文件末尾寫入新的內容
6.控制文件讀寫內容的模式:(t 和 b都不能單獨使用,必須與r,w,a結合使用)
t:(默認):無論讀寫都是以字符為單位,只能識別文本文件,必須要制定encoding
b:無論讀寫都是以位元組為單位,可以識別所有文件,一定不能指定encoding
7.文件的拷貝
with open (‘a.txt’,mode=’rb’) as af,\
open(‘b.txt’,mode=’wb’) as bf:
data=af.read
f.write(data)
執行程序後,打開文件,即可發現文件已成功拷貝,這裡使用 b 而不是用 t 模式,是因為文件有多種格式
8.文件的修改:
文件的修改是在硬盤上實現文件的覆蓋,相當於一個新的文件以舊的文件名來命名的; 文件的修改有倆種方式,分別適用於不同的情景
方式一(適用於容量小的文件):這種方式的原理是:創建一個新的文件,將舊文件的內容拷貝到新的文件中;這樣內存里就存在倆個文件,故不適用於容量大的文件,具體代碼見下方 View
with open(‘a.txt’,mode=’rt’,encoding=’utf-8′) as f:
data=f.read()
data_new=data.replace(‘yang’, ‘yv’)
with open(‘b.txt’,mode=’wt’,encoding=’utf-8′)as p:
p.write(data_new)
方式二(適用於容量大的文件):此方式的原理為:讀取舊文件的一行內容,修改後寫到臨時文件中,循環往複直到寫完,然後將源文件刪除,將臨時文件命名為源文件名.這種方式在內存中只存在2行文件,節省內存,可用於大文件
import os
with open(‘b.txt’,mode=’rt’,encoding=’utf-8′) as f,\
open(‘.b.txt.swap’,mode=’wt’,encoding=’utf-8′) as p:
for line in f:
p.write(line.replace(‘yv’,’yang’))
# 調用replace方法,將源文件中的’yv’,換成’yang’
os.remove(‘b.txt’)
os.rename(‘.b.txt.swap’,’b.txt’)
9. 文件的階段:truncate(n)
將文件中n個位元組後內容全刪了,當 n 不存在時,即刪除文件全部內容
10.文件內指針的移動
f.seek(): 指針的移動是以位元組為單位的
seek 有三種模式:
0:(默認模式) 指針在文件開頭,只有在 0 模式可以在 t 模式下用,也可以在 b 模式下用,而 1 ,2 模式只能在 b 模式下使用
1:指針在當前位置
2:指針在文件末尾
以下為具體事例:
# 0
with open(‘a.txt’,mode=’rt’,encoding=’utf-8′)as f:
f.seek(3,0)
print(f.tell()) # 指針當前位置
print(f.read()) # 從指針後讀出所有內容
# 1 參照指針當前位置
with open(‘a.txt’,mode=’rb’)as f:
f.read(2)
f.seek(4,1)
print(f.tell())
print(f.read().decode(‘utf-8’))
# 2 參照文件末尾
with open(‘a.txt’,mode=’rb’)as f:
f.seek(-5,2)
print(f.tell())
print(f.read().decode(‘utf-8’))
當 seek處於 2 模式時,可以將文件中新加入的內容打印出來,具體代碼如下:
# 另一個文件進行寫操作,寫的代碼如下:
with open(‘a.txt’,mode=’at’,encoding=’utf-8′)as f:
f.write(‘hello world\n’)
# 每在文件中寫入新的內容,都打印出來,以下代碼執行打印操作:
import time
with open(‘a.txt’,mode=’rb’)as f:
f.seek(0,2)
while True:
line=f.readline() # readline 可以讀取沒有內容的部分
# print(line.decode(‘utf-8’))
if len(line)==0:
time.sleep(0.1)
else:
print(line.decode(‘utf-8’))
python操作文本文件
在磁盤上讀寫文件之前,必須先打開這個文件。打開文件就需要提供文件的路徑。
在與Python程序同一個目錄下,我們有一個名為 pi.txt 的文件,它的內容如下:
現在使用Python來打開和關閉它:
執行此程序不會有任何輸出,這表示着打開和關閉文件都得到了正確執行。
可以看到,使用 open() 函數打開文件,參數為文件名(或文件路徑);該函數會返回一個文件句柄,文件句柄並不會實際保存文件的內容,而是代表着一種操作,在上面的例子中,文件句柄被賦值給變量 fhand 。
打開文件後,程序具有讀(默認)該文件的權限。
最後,使用文件句柄的 close() 方法關閉文件。這非常重要,因為使用完而沒有關閉的文件會佔用內存或造成安全問題。
如果Python找不到該文件,則會返回錯誤,比如下面這樣:
Python提示我們沒有相應的文件或者目錄: ‘pii.txt’。
打開文件後就可以對文件進行操作:
fhand.read() 方法將文件內容作為一個字符串返回。
文件中的每一行末尾使用換行符 \n 表示換行,例子中方法 rstrip() 去掉文本中的換行符,然後輸出。
程序的運行效果如下:
如果在文件關閉之前程序發生BUG意外退出,則文件不會關閉,為了避免此類事件的發生,可以使用 with 語句:
with 語句的特點是即便在操作文件時發生錯誤,文件也會自動被清理。
fhand.read() 雖然可以讀取文本內容,但是當我們想要逐行處理文件內容,或者文件很大而無法一次性加載進內存的時候,就不適用了。
可以使用 for 語句逐行處理文件內容:
本程序中將文件名保存在變量 filename 中。
打開文件後,使用 for 語句按行讀取文件內容。例子中,每次循環依次取一行文本以字符串的格式保存在變量 line 中,每次循環中變量 count 自增1。
這個程序的作用是,打開程序所在目錄的 when_old.txt 文件,然後統計行數,並輸出結果。
when_old.txt 文件的內容是:
可以使用其他方法操作字符串 line :
程序將以 ‘And’ 開頭的行打印出來。
打開文件後,默認的權限是讀(r),如果要寫文件,則需要使用寫(w)或者追加(a)權限。
w權限,打開一個文件用於寫入。如果該文件存在,則覆蓋該文件;如果該文件不存在,則創建該文件。
a權限,打開一個文件用於追加。如果該文件存在,在文件末尾追加;如果該文件不存在,則創建該文件。
下面是一個使用w權限打開文件的例子:
例子中使用w權限打開該文件,並寫入兩行。(如果該文件存在,則內容會被覆蓋)
fhand.write() 不會自動添加換行符,所以如果需要換行,需在末尾添加 \n 。
下面我們寫一個統計文件中詞頻的程序。
它會統計文件中各個詞的出現的次數,然後由高到低顯示出前5個詞。
首先我們完成打開和關閉文件的程序內容:
在例子中,由用戶輸入文件名,並且使用異常捕獲以處理文件打開時的錯誤。
下面對內容進行統計:
這個程序:
如此,我們就在字典中存放了 單詞:次數 的鍵值對。
由於字典不能保存順序,所以不能對其進行排序。為此,將每個鍵值對都添加到一個列表中:
在列表 word_list 中,每一項都是一個元組,每個元組第一個值是單詞出現的次數,第二個值是單詞內容。
對其進行逆向(由大到小)排序:
打印最終結果:
整個程序如下:
下面是程序運行結果的示例:
python對文本文件的讀有哪些方法,寫有哪些方法?
1 文件讀取全文本操作
在一定場景下我們需要把文本全部內容讀取出來,進行處理。python提供三種函數讀取文件,分別是read readline readlines,
read():讀取文件的全部內容,加上參數可以指定讀取的字符。
readline():讀取文件的一行。
readlines():讀取文件的所有行到內存中。
不同場景下我們可以選擇不同函數對文件進行讀取。
1.1 方法一
file_name = input(“請輸入你要打開的文件的完整路徑及名稱”)
file= open(file_name, “r”)
txt=file.read()
# 全文本的處理
file.close()
使用read函數將文件中的內容全部讀取,放在字符串變量txt中。這樣操作適合於文本較小,處理簡單的情況,當文件較大時,這種方式處理時不合適的。一次性讀取較大的文件到內存中,會耗費較多的時間和資源。這時候分批處理效果更好。
1.2 方法二
file_name = input(“請輸入你要打開的文件的完整路徑及名稱”)
file= open(file_name, “r”)
txt= file.read(4)
# 文本的處理while txt != “”txt= file.read(4)
# 批量文本處理
file.close()
這種方法適合於分批處理文本信息,每次批量讀入,批量處理,不會對內存造成較大的壓力。
1.3 方法三
file_name = input(“請輸入你要打開的文件的完整路徑及名稱”)
file= open(file_name, “r”)for line infile.readlines():
# 處理每一行數據
file.close()
這種處理方式適合處理以行為分割特點的文本,並且文本較小,因為這種處理方式需要一次性把文件所有內容讀取到內存中。
1.4 方法四
file_name = input(“請輸入你要打開的文件的完整路徑及名稱”)
file= open(file_name, “r”) # 這裡的file時文件句柄for line infile:
# 處理每一行數據
file.close()
這種方式和方法三中的區別是分行讀入,逐行處理,不會一次性把文件所有內容都讀入到內存中,對一些大文件的處理是很有效的。
2 文件寫入文本操作
文件寫入有兩種寫入函數和一種輔助支持。
write():向文件中寫入一個字符或者位元組流
writelines():將一個元素全為字符串的列表寫入到文件中 需要注意的是,writelines寫入列表元素的時候會把列表元素的內容拼接到一起寫入,不會有換行和空格 。
seek(): 輔助寫入函數offset偏移量參數代表含義如下
0 – 文件開頭
1 – 當前位置
2 – 文件結尾
2.1 方法一
file_name = input(“output.txt”, “w+”)
text= “hello world!”file_name.write(text)
file.close()
2.2 方法二
file_name = input(“output.txt”, “w+”)
list= [“中午”,”早上”,”晚上”]
file_name.writelines(list)for line infile:
# 讀取寫入的數據,這時候發現是沒有任何內容的
file.close()
我們增加一行代碼就可以讀取到寫入的文件內容,利用seek()函數調整寫操作指針的位置,可以實現寫操作之後的正常讀取。
file_name = input(“output.txt”, “w+”)
list= [“中午”,”早上”,”晚上”]
file_name.readlines(list)
file_name.seek(0) # 調整寫的指針到文件的開始位置for line infile:
# 讀取寫入的數據,這時候會讀出一行寫入的數據。
file.close()
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/186108.html