python 開啟檔案open和codecs區別

2021-09-23 01:36:21 字數 1589 閱讀 9953

當我面有資料需要儲存時,第一時間一般會想到寫到乙個txt檔案中,當然,資料量比較大的時候還是寫到資料庫比較方便管理,需要進行網路傳輸時要序列化,json化。下面主要整理一下平時用的最多的寫入到檔案中,一般以txt結尾,linux裡不會以後綴來區分檔案型別,字尾可以隨便,也可以沒有。

python讀寫檔案估計大家都用open內建函式,或者file這個工廠函式,這兩個的效果基本一樣。

開啟檔案的方式一般為:f=open(file_name,access_mode = 'r',buffering = -1)。file_name就是檔案的路徑加檔案名字,不加路徑則檔案會存放在python程式的路徑下,

access_mode就是操作檔案的模式,主要有r,w,rb,wb等,細節網上一大堆,buffering = -1是用於指示訪問檔案所採用的快取方式。0表示不快取;1表示只快取一行,n代表快取n行。如果不提供或為負數,則代表使用系統預設的快取機制。

開啟以後就是寫和讀的操作。但是用open方法開啟會有一些問題。open開啟檔案只能寫入str型別,不管字串是什麼編碼方式。例如:

>>> fr = open('test.txt','a')

>>> line1 = "我愛祖國"

>>> fr.write(line1)

這樣是完全可以的。但是有時候我們爬蟲或者其他方式得到一些資料寫入檔案時會有編碼不統一的問題,所以就一般都統一轉換為unicode。此時寫入open方式開啟的檔案就有問題了。例如

>>> line2 = u'我愛祖國'

>>> fr.write(line2)

traceback (most recent call last):

file "", line 1, in fr.write(line2)

unicodeencodeerror: 'ascii' codec can't encode characters in position 0-11: ordinal not in range(128)

>>>

怎麼辦,我們可以將上面的line2編碼成str型別,但是太麻煩。我們要把得到的東西先decode為unicode再encode為str。。。

input檔案(gbk, utf-8...)   ----decode----->   unicode  -------encode------> output檔案(gbk, utf-8...)

代替這繁瑣的操作就是codecs.open,例如

>>> import codecs

>>> fw = codecs.open('test1.txt','a','utf-8')

>>> fw.write(line2)

>>>

不會報錯,說明寫入成功。這種方法可以指定乙個編碼開啟檔案,使用這個方法開啟的檔案讀取返回的將是unicode。寫入時,如果引數 是unicode,則使用open()時指定的編碼進行編碼後寫入;如果是str,則先根據源**檔案宣告的字元編碼,解碼成unicode後再進行前述 操作。相對內建的open()來說,這個方法比較不容易在編碼上出現問題。

總結一下:檔案讀盡量用第二種方法,一般不會出現編碼的問題。至於用第二種方法有什麼缺點,我沒有研究過。。

python 開啟檔案 open

三 檔案讀寫定位操作 讀 f.read size 如果沒有size即f.read 一次性讀取檔案全部內容,返回型別str 如果有size即f.read 50 讀取最多的位元組內容 1.檔案很小,可一次性讀取,檔案較大,超過記憶體大小,內容爆掉 2.檔案過大,可用f.read size x為每次最多讀...

使用open開啟FIFO檔案

include include include include include include include define fifo name tmp my fifo int main int argc,char argv argv if strncmp argv,o rdonly 8 0 ope...

Python開啟檔案open 的注意事項

剛剛用open filename 來開啟txt格式的檔案,總是出現錯誤,總是找不到檔案讀取的內容,後來才發現是open 在使用過程中自動關閉了。這裡介紹另種方法解決這個問題。第一種方法。with open filename as file object content file object.rea...