python檔案操作詳解
阿新 • • 發佈:2018-12-28
檔案操作是程式設計中必不可少的,配置檔案,資料儲存都是對檔案操作;按檔案操作與格式主要內容如下圖:
檔案基本操作為開啟,讀取,寫入,關閉,我們按這個過程來詳解講解。
1.一個例子搞定開啟,讀取與關閉:
準備工作:
1>新建檔案:E:\workdir\readme.txt(或者自己準備一個其他文字檔案);
2>檔案新增一行內容:this is test
直接上程式碼,有個基本認識:
#檔案路徑 path = r'E:\workdir\readme.txt' #開啟檔案 f = open(path) #讀取檔案 txt = f.read() print(txt) #關閉檔案 f.close()
輸出結果:this is test;
感覺檔案操作太簡單了。
那麼問題來了:如果檔案不存在如何建立檔案?如何寫檔案?這種方式能夠寫入嗎?
我們來看檔案開啟方式。
2 檔案開啟方式詳解:
2.1 open方法詳解:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
返回一個檔案IO物件,如果檔案不存在或者打開出錯觸發異常;
主要引數:
引數 | 說明 |
---|---|
file | 檔案路徑 |
mode | 開啟方式,預設只讀方式 |
encoding | 開啟檔案編碼格式 |
其他引數暫時使用預設值。
我們再來看下檔案開啟方式: |
開啟方式 | 說明 |
---|---|---|
'r' | 只讀方式 ,不能寫入 | |
'w' | 只寫方式開啟,檔案不存在建立檔案,檔案存在截斷檔案 | |
'a' | 只寫方式開啟,如果檔案存在,再檔案尾部開始寫入 | |
'+' | 讀寫方式開啟 | |
'b' | 二進位制方式開啟,例如圖片; 'rb','wb','ab',上面操作類似 |
2.2 開啟方式測試:
工作目錄:'E:\workdir';
case1:檔案不存在建立檔案:
#該檔案不存在
wfpath = r'E:\workdir\testw.txt'
f = open(wfpath, 'w')
#寫入一行
f.write('python')
f.close()
檢視E:\workdir\,建立檔案testw.txt;
case2:檔案存在只寫方式開啟:
準備工作:
1>在'E:\workdir'下建立檔案:test1.txt;
2>寫入一行文字:'abcd1234';
測試:
#檔案存在
fpath = r'E:\workdir\test1.txt'
f = open(fpath, 'w')
f.close()
檢視r'E:\workdir\test1.txt',內容被清空;
case3:只寫方式開啟,能否讀取:
fpath = r'E:\workdir\test1.txt'
#檔案只寫方式開啟
f = open(fpath, 'w')
#進行讀取
f.read()
f.close()
結果:
UnsupportedOperation Traceback (most recent call last)
<ipython-input-13-30cd4bdc05f3> in <module>
3 fpath = r'E:\workdir\test1.txt'
4 f = open(fpath, 'w')
----> 5 f.read()
6 f.close()
UnsupportedOperation: not readable
只寫方式開啟不能寫入。
case4:只寫方式開啟,尾部開始寫入:
使用'w'方式開啟檔案,檔案會被裁剪,如何在尾部追加資料?使用'a'模式:
#先寫入abc,關閉重新開啟檔案,在寫入123
fpath = r'E:\workdir\testa.txt'
#只寫方式開啟
f = open(fpath, 'w')
f.write('abc')
f.close()
#追加方式開啟,檔案尾開始寫入
fpath = r'E:\workdir\testa.txt'
f = open(fpath, 'a')
f.write('123')
f.close()
檔案內容:abc123;
cast5:讀寫方式開啟:
模式 | 說明 |
---|---|
'r+' | 讀寫方式開啟,從檔案頭開始讀寫 |
'r+' | 讀寫方式開啟,檔案被清空 |
'a+' | 追加方式讀寫開啟,從檔案尾開始讀寫 |
#檔案路徑,檔案內容:'this is test'
path = r'E:\workdir\readme.txt'
#開啟檔案
f = open(path, 'r+')
line = f.read()
print(line)
#寫入文字
f.write('end')
#關閉檔案,檔案尾寫入end
f.close()
結果:讀取檔案內容,並在檔案尾插入end;
大家可以嘗試測試另外兩種讀寫模式。
3.檔案讀取
讀取檔案方法:
方法 | 說明 |
---|---|
read(size=-1, /) | 讀取指定位元組或者讀取完成,預設讀取完 |
readline(size=-1, /) | 讀取一行 |
readlines(hint=-1, /) | 讀取多行,預設讀取完,返回每行組成列表 |
環境準備:readme.txt中新增四行:
1:語法
2:環境
3:邏輯處理
4:資料結構
case1:一次讀取完
path = r'E:\workdir\readme.txt'
f = open(path)
lines = f.read()
print(lines)
case2:逐行讀取
path = r'E:\workdir\readme.txt'
f = open(path)
while True:
#讀取完,讀取內容為''
line = f.readline()
if line:
print(line, end='')
else:
break
case3:按行一次讀完
path = r'E:\workdir\readme.txt'
f = open(path)
lines = f.readlines()
print(lines)
lines為列表;
case4:使用for迴圈逐行讀取:
如果檔案過大,一次讀取會佔用大量記憶體,所以一般情況下,我們使用for遍歷檔案:
path = r'E:\workdir\readme.txt'
f = open(path)
for line in f:
print(line, end='')
4.檔案寫入:
方法 | 說明 |
---|---|
write(text, /) | 寫入字串,返回寫入位元組數 |
writelines(lines, /) | 寫入多行 |
實際操作:
#‘\n’換行符
info = ['java\n','c++\n']
#只寫方式開啟檔案
path = r'E:\workdir\testw.txt'
f = open(path,'w')
#寫入一行
f.write('python'+'\n')
#寫入多行
f.writelines(info)
f.close()
到這裡檔案基本操作我們就介紹完了,在專欄中我們再來看如何使用。