python 對檔案的讀寫在程式開發中也是非常常見的操作,比如寫入一些簡單的系統日誌、把爬蟲採集的資料寫入到本地檔案等等,今天我們聊聊 python 怎麼去讀寫乙個檔案。
1、python 寫入檔案
# -*- coding:utf-8 -*-
#傳統模式,不夠安全,需要手動關閉檔案資源
#如果在關閉檔案之前程式異常終止,
#被開啟的檔案不能被關閉,占用系統資源
f = open('newfile1.txt','w')
f.write('這種模式寫入不夠安全,請慎用')
f.close()
#推薦模式,即使程式異常終止
#也會自動關閉檔案
#類似於 try catch
with open('newfile2.txt','w') as f:
f.write('推薦使用這種模式')
open('***.txt','w'),'w' 表示以寫的模式開啟檔案,在寫之前要先找到這個檔案,如果檔案不存在, python 則會先自動建立該檔案,然後再寫入內容。
注意程式寫入的內容並不一定立刻就寫入硬碟了,往往是先寫入到記憶體中,然後再根據的系統的空閒時間慢慢從記憶體寫入硬碟中,等到呼叫 close 方法的時候才會確認把記憶體中剩下的資料寫入到硬碟。
所以一旦我們忘記主動呼叫 close 來關閉檔案的話,或者在程式寫入檔案的時候出現異常終止程式從而不會再繼續往下執行 close 方法,就可能導致部分資料丟失,為了避免這種情況,我們推薦使用 with 這種方式來開啟檔案,使用 with 即不管是程式在完成對檔案寫入操作之後還是程式寫入檔案異常終止都會自動呼叫 close 方法來關閉檔案。
# -*- coding:utf-8 -*-
#內容追加模式
with open('newfile2.txt','a') as f:
f.write('不會覆蓋已有內容')
如果重複對乙個檔案寫入內容,會不會對已經存在的內容有影響呢,答案是會的。
python 的檔案寫模式分覆蓋寫和追加寫。剛剛上面提到的 'w' 模式就是覆蓋寫,即每次以 'w' 模式開啟檔案都會先直接清空該檔案,注意是只要一開啟就會先清空即使你不寫入任何內容。還有一種就是使用 'a' 追加模式,這種模式不會清空檔案中原有的內容,只會在原有內容後面繼續追加新的內容。
2、python 讀檔案
# -*- coding:utf-8 -*-
#讀檔案,一次性讀所有內容,適用檔案大小較小
with open('newfile1.txt','r') as f:
print(f.read())
#讀檔案,迴圈讀,每次唯讀指定大小的內容,適用檔案大小較大
with open('newfile1.txt','r') as f:
while true:
print(f.read(2))
# 開啟gbk檔案
with open('newfile1.txt','r',encoding='gbk') as f:
print(f.read())
#按行讀取內容
with open('newfile1.txt','r') as f:
for line in f.readlines():
print(line)
讀檔案和寫檔案類似,只不過是以讀的模式開啟檔案,open('***.txt','r'),'r' 表示以唯讀模式開啟檔案,讀模式開啟檔案需要確認檔案已經存在,如果檔案不存在程式會報找不到檔案的錯誤。
如果檔案開啟成功,接下來會呼叫 read 方法來一次性把檔案的所有內容讀到記憶體當中,最後再需要呼叫 close 來關閉檔案。檔案的讀寫操作完成之後都需要關閉檔案,不然一直開啟的檔案會占用系統資源。
同樣的,由於檔案的讀寫過程中可能會出現異常,導致不能執行後面的 close 方法來關閉檔案,所以跟上面提到的檔案的寫入一樣,我們也推薦使用 with 來開啟檔案,總之,對於檔案的讀寫操作,都推薦使用 with 方式來開啟。
# -*- coding:utf-8 -*-
#讀檔案,迴圈讀,每次唯讀指定大小的內容,適用檔案大小較大
with open('newfile1.txt','r') as f:
while true:
print(f.read(2))
如果乙個檔案很大,有幾十個 g ,那麼把所有的內容一次性讀到記憶體中肯定不現實,這時候我們可以迴圈讀檔案,每次唯讀指定大小的內容,read(size) 表示只讀取 size 位元組的資料。
# -*- coding:utf-8 -*-
#按行讀取內容
with open('newfile1.txt','r') as f:
for line in f.readlines():
print(line)
也有的檔案內容是按行寫入的,比如常見的 config 配置檔案,我們還可以使用 readline() 可以按行來讀取內容,也可以把檔案所有內容先按行讀取最後放到乙個陣列 list 中返回。
# -*- coding:utf-8 -*-
# 開啟gbk檔案
with open('newfile1.txt','r',encoding='gbk') as f:
print(f.read())
實際上不同的檔案會有不同的編碼格式,上面我們講的都是基於 utf-8 編碼格式的檔案,如果要開啟非 utf-8 的檔案,還需要使用 open('***.txt','r',encoding='gbk') 這種方式來指定檔案的編碼。
3、二進位制檔案讀寫
# -*- coding:utf-8 -*-
#二進位制讀寫檔案
python檔案的寫入
wirte 方法把字串寫入檔案,writelines 方法可以把列表中儲存的內容寫入檔案。f file hello.txt w li hello world n hello china n f.writelines li f.close 檔案的內容 hello world hello china w...
Python 寫入XML 檔案
需要將test case轉為xml檔案方式用於讀取。中test suit.txt 是用來儲存原來的case檔案的,故做了一點string的處理,用split 函式摳出自己需要的字段 import xml.dom.minidom impl xml.dom.minidom.getdomimplement...
python檔案的寫入
wirte 方法把字串寫入檔案,writelines 方法可以把列表中儲存的內容寫入檔案。f open hello.txt w encoding utf 8 li hello world n hello china n f.writelines li f.close 檔案的內容 hello worl...