python按行遍歷乙個大檔案,最優的語法應該是什麼?

時間 2021-06-02 18:00:46

1樓:qi du

with open('filename') as file:

for line in filedo_things(line)

這是最快、最安全的方式

2樓:黃凱煥

9我不會告訴你,其實直接可以這樣:

file = open(file_name)

for line in file:

dosomething(line)

不過這樣做,每一行會保留換行符

補充一下,由於手頭上沒有電腦,我不確定我這種方法是否比你的第一種快,但是你的第一種方法是一次性將檔案的內容全部讀進乙個list後再用for進行遍歷,而第二種是一次讀取一行處理,所以,第一種比第二種快是在理解範圍內的,至於pypy的問題,我個人的理解是pypy優化while比優化for優化得更多(猜測)。。如果是特大檔案的話,不推薦使用第一種方法。

2023年3月1號再次補充

基於嚴謹的科學態度,今天做了測試,我之前提到的方法是不會一次性讀取所有檔案的,使用660m的檔案進行測試,

for i in file.readlines耗時1.5s

for i in file耗時0.86

while file.readline耗時3.3

而且,我還發現了乙個更加神奇的事情,temp = file.readlines

for i in temp

比直接使用for i in file.readlines要快,耗時1.2s

最後測試了不同大小的檔案,發現無論是大檔案還是小檔案,都是直接對檔案物件進行for操作是最快的!

不過該結論侷限於我自己的測試資料

3樓:呵呵一笑百媚生

理論上來說,總體上file.readlines()可以(取決於實現)不慢於你自己手動的一次次呼叫file.readline(),因為前者的迴圈在C語言層面,而你的迴圈是在Python語言層面。

但是在記憶體占用上前者可能是後者的好幾十百倍,因為前者會一次性把所有資料讀取到記憶體中,而後者只每次讀取一行。

更好的寫法是:

with

open

('filename')as

file

:for

line

infile

:do_things

(line)

如何編輯乙個大檔案?

lymph 在linux下,先用split 將大檔案拆成很多的小檔案,比如70G的檔案拆成100個小檔案,每個檔案只有700Meg,挨個編輯完成後,再用cat命令將這些小檔案合成為乙個大檔案。 Seplost EmEditor,官方說法 EmEditor is optimized for handl...

為什麼window系統複製乙個大檔案很快,複製一堆小檔案就很慢?

食鐵獸 檔案系統類似於書籍,有乙個目錄,記錄檔案存放的位置。複製檔案類似於抄書 複製大檔案,開啟書,從目錄找到位置,就開始抄複製大量小檔案,則要反覆的翻目錄 積木狗 拷貝檔案的邏輯流程 察看檔案源位置 在目標盤開闢一片區域 複製寫入開始。複製好多小檔案是不停重複以上流程,前兩步占用了很多時間 Plu...

怎麼用python統計乙個txt檔案中的三個中文名字出現的次數?

coder 謝公子 import re text open text.txt r read name 張飛 關羽 劉備 for i in name result re.findall i,text print i,出現了 d次 len result z666 text open 路徑,encodin...