【Python】read() readline() readlines() 的比較


Python內置的讀寫文件的函數,底層實現還是C。

 

讀文件函數結構:

要用讀文件模式打開一個文件對象,使用Python內置的open()函數,傳入文件名和標識符。

"r"表示讀文件,如果文件不存在,就會拋出錯誤碼和詳細的信息。

如果文件打開成功,可以使用讀取)函數一次讀取文件的全部內容,以read()函數為例,Python把內容讀到內存,用一個str對象表示。

在讀取結束以后需要調用close()方法關閉 。

f = open('/Users/michael/test.txt', 'r')
f.close()

由於文件在讀寫時可能產生error,一旦出錯,后面的f.close()就不會被調用,所以為了保證能夠正常關閉文件,可以使用try...finally進行異常處理。

try:
    f = open('/path/to/file', 'r')
     f.read()
finally:
    if f:
        f.close()

也可以使用更簡便的的方法with()。該函數不需要調用close()。該函數結構結束以后自動關閉讀取。

with open('/path/to/file', 'r') as f:
     line = f.read()
    ...

讀取方式:

python的讀取方式一共有三種,分別是read()、readline()、readlines()

read():

調用read()會一次性讀取文件全部內容, 速度最快,但當數據過大時不適用。

readline():

使用readline()方法,逐行讀取內容,返回結果為list。

with open('/path/to/file', 'r') as f:
    line = f.readline()
    while line:
        line = f.readine()  #這里只能讀取一行數據
        ...

readlines():

選擇使用readlines()方法,一次性讀取文本所有內容,返回結果為list,其中每個元素結尾有"\n"。該方法適合讀取配置文件,速度較快,但是文本越大占用內存越大。

這種方法讀取的文本內容,每行文本末尾都會帶一個'\n'換行符 (可以使用L.rstrip('\n')去掉換行符)。注意,python中方法的調用返回的是一個副本,並不會對原有的元素進行修改,如果要修改末尾符號,需要處理賦值給新的字符串。

with open('/path/to/file', 'r') as f:
    line = f.readlines()
 
 
for i in line:
    lines.append(i.rstrip('\n'))

優化的處理方式:

通常在數據挖掘中,數據都是有規律的。因此使用迭代的方式進行讀取數據是一種很好的兼顧時間和內存的pythonic寫法:

split() 通過指定分隔符對字符串進行切片,如果參數 num 有指定值,則僅分隔 num 個子字符串,通過split()方法使得read()返回一個字符串。這是最通用的處理方式。

但是,這種方式對格式有嚴格要求。比如說如果結尾的時候有多個"\n",那么最后幾個List元素可能為空。

with open('/path/to/file','r') as f:
   line = f.read().split('\n')

 

注:文件內容的覆蓋追加問題:

一個文件在對象沒有關閉之前可以被寫多次,每一次都在上一次的末尾追加內容,但是這不是真的寫進了文件,而且將內容放在了內存中,在關閉指針以后一次性全部寫入。

當關閉指針以后再打開文件,則會從文件的首行開始寫,從而覆蓋原有內容。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM