什麼是檔案?
作業系統給使用者提供的可以操作硬碟的簡易介面
python的檔案操作:
r: 讀
1、只能讀,不能寫, f.readable() = true
2、如果檔案不存在,會報錯。
w: 寫
1、不能進行讀操作,只能寫。
2、寫的時候會覆蓋之前的內容
3、如果指定檔案不存在,會建立乙個,不會報錯。
a: 追加
1、不能進行讀操作
2、指定檔案不存在,不會報錯,會建立乙個檔案。
3、游標預設在末尾。
檔案操作單位t: 文字模式
必須和r/w/a連用,比如 rt, wt, at, 如果不寫,預設為t
b: 二進位制模式
不能單獨在mode裡使用,必須和r/w/a連用。通常用來處理非文字檔案
open 關鍵字
f = open('檔案路徑', mode='', encoding="")
python2中讀取檔案預設使用的是ascll編碼,python3讀取檔案預設使用utf-8
python2讀取檔案列印時會報錯
注意:如果檔案操作是b模式的話就不能寫encoding,不然會報錯 :valueerror: binary mode doesn't take an encoding argument
單獨用open操作檔案時,需要關掉檔案介面 f.close() 。因為如果不關的話,雖然變數f,python會通過垃圾**機制**掉,但是對於作業系統,它會把這個檔案操作的介面一直開著,導致浪費資源。
開啟乙個檔案的時候,會占用兩部分資源:作業系統級開啟的檔案 + 應用程式的變數。所以要注意,兩個資源都要及時**。
python 提供了乙個方法,能自動**作業系統級開啟的檔案資源。那就是with關鍵字。
with open('檔案路徑', mode='') as f:
python3 操作檔案只有一種方法 open()
python2 操作檔案有兩種方法 file() open()
file(), open()的操作都比較類似,但是兩個有本質的區別,file是乙個檔案類,開啟檔案時相當於是在構造檔案類。而open()是在用python的乙個內建函式來操作。
python2讀取檔案預設使用的是ascll,python3預設使用的是utf-8編碼
f.read() 讀取所有資料
f.readline() 讀取一行資料, 游標移動到第二行行首
f.readlines() 返回乙個列表,列表元素是每一行的內容
f.readable() 判斷不否可讀
f.write() 寫入資料
當write針對 b模式寫入時,需要把資料進行encode, 將記憶體的unicode編碼內容 encode成二進位制檔案,才能寫入。
f.writelines() 寫入乙個迭代器物件,比如列表。
當寫入針對b模式時,需要把迭代器裡面的元素進行encode,
f.writeable() 判斷能不能寫
f.truncake(size:int) 截斷檔案,保留 0-size長度的檔案,其餘的全部刪掉。
truncake是截斷檔案,所以檔案的開啟方式必須是可寫,w或者w+會清空檔案,所以不能選擇。因此truncake截斷檔案只能在 r+, a, a+模式下進行。
f.tell() 檢視游標移動了多少位
f.seek(offset:int, whence=0)
offset: 游標移動的位數
whence 有三種選擇 0, 1, 2
0:表示游標從頭開始
1:表示游標從當前位置開始
2:表示游標從尾部開始
注意:1和2模式只能在b模式下使用,且只能以bytes移動檔案。
思考:如何修改檔案內的內容?
修改時,開啟的檔案必須可寫,而w,w+之類的會清空檔案,修改不了。a,a+模式,只能在尾部新增。也不行
使用r+的時候,再利用f.seek(),移動游標,新內容會覆蓋舊內容。如果長度不一樣,就會把要用的內容覆蓋掉。
方案一:將檔案的內容全部讀取出來,利用replace替換掉要修改的內容。再將替換過的內容利用w/w+寫入檔案
with open('檔案路徑', 『r』, encoding='utf-8'):
data = f.read()
with open('檔案路徑', 'w', encoding='utf-8') as f:
res = data.replace(old, new)
f.write(res)
缺點:當檔案很大時,將內容一次性全read出來,有可能造成記憶體溢位。
優點:不佔硬碟空間,硬碟始終只有乙個檔案。
方案二:將檔案的內容逐行讀取,再開啟乙個新檔案,寫入逐行讀取並修改後的內容。最後把舊檔案刪了,保留並將新檔案重新命名為舊檔案。
with open('檔案路徑', 『r』, encoding='utf-8') as f, \
open('新檔案路徑',『a', encoding='utf-8') as f2,
for line in f:
line_data = line.replace(old, new)
f2.write(line_data)
import os
os.remove('舊檔案')
os.rename('新檔案', 『舊檔案』)
優點:記憶體中始終只有一行內容,不佔記憶體
缺點:在某一時刻,硬碟中會存在兩個檔案
python 檔案操作
簡明 python 教程 中的例子,python 執行出錯,用open代替file 可以執行。poem programming is fun when the work is done if you wanna make your work also fun use python f open e ...
python檔案操作
1,將乙個路徑名分解為目錄名和檔名兩部分 a,b os.path.split c 123 456 test.txt print a print b 顯示 c 123 456 test.txt 2,分解檔名的副檔名 a,b os.path.splitext c 123 456 test.txt pri...
Python 檔案操作
1.開啟檔案 如下 f open d test.txt w 說明 第乙個引數是檔名稱,包括路徑 第二個引數是開啟的模式mode r 唯讀 預設。如果檔案不存在,則丟擲錯誤 w 只寫 如果檔案 不存在,則自動建立檔案 a 附加到檔案末尾 r 讀寫 如果需要以二進位制方式開啟檔案,需要在mode後面加上...