python如何讀取文字中的資料並處理(python開啟檔案並讀取內容)
讀寫檔案是最常見的IO操作。Python內建了讀寫檔案的函式。
Python open() 方法用於開啟一個檔案,並返回檔案物件,在對檔案進行處理過程都需要使用到這個函式,如果該檔案無法被開啟,會丟擲 OSError的錯誤。
完整的語法格式為:
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
引數說明:
- file: 必需,檔案路徑(相對或者絕對路徑)。
- mode: 可選,檔案開啟模式
- buffering: 設定緩衝
- encoding: 一般使用utf8
- errors: 報錯級別
- newline: 區分換行符
- closefd: 傳入的file引數型別
讀檔案
要以讀檔案的模式開啟一個檔案物件,使用Python內建的open()函式,傳入檔名和開啟模式。讀檔案的開啟模式可以不傳,預設就是mode='r'。
./ 當前目錄(當前檔案);../ 上級目錄(上級檔案)。
開啟模式'r'表示讀,這樣,我們就成功地開啟了一個檔案。
如果檔案不存在,open()函式就會丟擲一個IOError的錯誤,並且給出錯誤碼和詳細的資訊告訴你檔案不存在。由於我要開啟的檔案存在,所以不會報錯。
還有一個問題如果內容中有中文用f = open(path,'r')去讀檔案又會報編碼錯誤。所以正確的方法傳三個引數最好:傳入檔名、開啟模式和編碼引數。
編碼(encoding)推薦utf-8(也可以寫成utf8)這樣無論中文、英文或者混合的檔案都可以讀。其中開啟模式mode=可以不寫,直接引數。因為第一引數檔名必須,開啟模式是第二引數,編碼是第四引數所以不能省略。
如果要讀取圖片或者音訊檔案,開啟模式就用'rb',b代表二進位制。
讀取檔案怎麼操作內容
- read():一次性讀取檔案的全部內容
- readline():每次讀取一行內容
- readlines():一次讀取所有內容並按行返回列表
read()
如果檔案很小,read()一次性讀取最方便。
輸出結果
如果檔案有10G,記憶體就爆了,所以,要保險起見,可以反覆呼叫read(size)方法,每次最多讀取size個位元組的內容。
檔案的內容一部分
read(size)
輸出結果
readline()可以每次讀取一行內容
輸出結果:空行也算一行
readlines():一次讀取所有內容並按行返回列表
輸出結果
可以用for...in...來迴圈取內容。
既然是列表就可以用切片
寫檔案
寫檔案和讀檔案是一樣的,唯一區別是呼叫open()函式時,檔案開啟模式把'r'換成'w'或者'a',表示寫文字檔案。
無論'w'或者'a',如果該檔案不存在,建立新檔案。
區別就是:
'w',如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。
第一次寫入內容,w.txt檔案不存在,自動幫你建立w.txt。
第二次寫入內容,w.txt已經存在,就把第一次寫入的內容刪掉,再把第二次內容寫入。
'a',開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。
第一次寫入內容,a.txt檔案不存在,自動幫你建立a.txt。
第二次寫入內容,a.txt已經存在,直接在第一次寫入內容的後面把第二次內容寫入。
close(),無論是讀還是寫檔案都要開啟檔案,開啟就要關閉檔案,要不然一直開啟不關閉,記憶體頂不住。所以開啟就要要關閉檔案。
每次都這麼寫實在太繁瑣,所以,Python引入了with語句來自動幫我們呼叫close()方法。注意縮排。
在Python中,檔案讀寫是通過open()函式開啟的檔案物件完成的。使用with語句操作檔案IO是個好習慣。
mode模式主要幾種:
- :開啟一個檔案進行更新(可讀可寫)。
- r:以只讀方式開啟檔案。預設模式
- b:二進位制格式開啟
- w:開啟一個檔案只用於寫入。
- a:開啟一個檔案用於追加。
需要二進位制就後面rb、wb、ab,其實加號(r 、w 、a )我試了跟沒加效果沒有多大區別。總之可以組合。
寫一個index.html
生成檔案中的html程式碼
瀏覽器效果
讀寫檔案內容的基礎差不多就是這麼多,往後需要多練、多寫來加深記憶。