標籤:app 緩衝區 覆蓋 with open 高效 技術分享 hello 清空檔案 讀取檔案
檔案操作三部曲:開啟 -> 操作 -> 關閉。
一. 檔案操作, 常用的幾種模式:
如果開啟檔案,沒有指定操作方式,預設是讀取;
對於r/r+,如果檔案不存在會報錯,使用時需要保證檔案存在;
對於w/w+,如果使用它們,每次運行檔案內容都會被覆蓋;
對a/a+,這種方式會追加內容,因此指標在結尾。
* 注意:當檔案操作方式是a 或者a+ 時,檔案指標在結尾,如果想要讀取檔案內容,記得修改指標的位置, f.seek(0) 這是將檔案指標放在檔案開始的地方。
二. 檔案的幾種操作方法:
f.seek(), f.read(), f.readline(), f.readlines(), f.close(), f.write(), f.writelines(), f.truncate(), f.flush()
1. 以讀取"test"檔案為例,對檔案各種進行讀取的操作:
1 f = open(‘test‘,‘a+‘,encoding=‘utf-8‘) # 開啟檔案“test”,往檔案中追加內容 2 f.seek(0)#將檔案指標放在檔案開始 3 print(‘read(): 讀取檔案裡面的全部內容‘) 4 print(f.read()) 5 f.seek(0) 6 print(‘readline() : 唯讀取一行的內容‘) 7 print(f.readline()) 8 #f.seek(0) #不加這行的話f.readlines()會輸出剩餘的內容 9 print(‘readlines(): 讀取檔案裡面的全部內容,把檔案裡面每一行的內容放到一個list裡‘)10 print(f.readlines())11 f.close() # 開啟檔案後記得關閉檔案
這是對應的讀取結果:
2. 迴圈讀取檔案: next()
Python 3 中的 File 對象不支援 next() 方法。 Python 3 的內建函數 next() 通過迭代器調用 __next__() 方法返回下一項。 在迴圈中,next()方法會在每次迴圈中調用,該方法返迴文件的下一行,如果到達結尾(EOF),則觸發 StopIteration
3. 高效讀取檔案的方式:for f in fw:
1 fw = open(‘test‘,encoding=‘utf-8‘)2 count =13 #直接迴圈檔案對象的話,就是迴圈檔案裡面的每一行4 for f in fw:5 print(‘第%s行‘ %count,f)6 count+=17 fw.close()
4. 下面是寫入檔案,重新整理緩衝區,清空檔案的操作:
仍然以上面的test 檔案為例,
1 f = open(‘test‘,‘a+‘,encoding=‘utf-8‘)# 開啟檔案“test”,往檔案中追加內容 2 f.write(‘apple‘+ ‘\n‘)#f.write()寫入的需為字串, \n 為寫入換行 3 tu=(‘dds‘,‘ttt‘,‘iii‘) 4 f.writelines(tu)#寫的時候,傳入一個可迭代的對象 5 f.write(‘\n‘) 6 print(f.tell())#返迴文件當前位置。 7 f.flush()#重新整理檔案內部緩衝,直接把內部緩衝區的資料立刻寫入檔案, 而不是被動的等待輸出緩衝區寫入。 8 f.seek(0) 9 print(f.read())10 f.truncate(10)#截取指定長度11 f.seek(0)12 print(f.read())13 #f.truncate()#清空檔案內容14 f.close()# 開啟檔案後記得關閉檔案
這是對應的結果:
5. with 操作檔案,自動關閉檔案
在操作檔案的時候,經常忘了關閉檔案,這樣的就可以使用with,它會在使用完這個檔案控制代碼之後,自動關閉該檔案。
具體使用如下:
1 with open(‘test‘, ‘r+‘) as f:2 res = f.read()3 new_res = res.replace(‘ttt‘, ‘nice‘) # 替換 ttt -> nice4 f.write(new_res)5 f.flush()6 f.seek(0)7 print(f.read())
用with 進行多檔案的操作,具體如下:
1 with open(‘test‘,‘r+‘) as fr:2 with open(‘test_new‘, ‘w+‘) as fw: # 這個是多檔案的操作,開啟兩個檔案,fr是讀,fw是建立一個檔案寫3 for line in fr: # 迴圈test 檔案中的每一行4 new_line = line.replace(‘hello‘, ‘good‘)5 fw.write(new_line) # 寫到test_new檔案中6
以上是對檔案操作的總結。
Python 檔案操作