我需要閱讀一個有兩百萬行的CSV文件。該文件一整天都在增長。在每次處理文件(並將每行壓縮成字典)後,我再次啓動該過程,除了僅爲新行創建字典。Python CSV閱讀器從line_num開始
爲了達到新的界限,我必須用CSV閱讀器遍歷每一行,並將行號與我的「最後一行讀取」數據進行比較(據我所知)。
有沒有辦法只是'跳過'到該行號?
我需要閱讀一個有兩百萬行的CSV文件。該文件一整天都在增長。在每次處理文件(並將每行壓縮成字典)後,我再次啓動該過程,除了僅爲新行創建字典。Python CSV閱讀器從line_num開始
爲了達到新的界限,我必須用CSV閱讀器遍歷每一行,並將行號與我的「最後一行讀取」數據進行比較(據我所知)。
有沒有辦法只是'跳過'到該行號?
你不能去特定的行號,除非行的大小是固定的,你知道這個大小。當我說你不能,我的意思是你不能沒有加載整個文件在內存中,並由\n
字符分裂。
如果CSV有固定線路的大小是這樣的:
id,code,quantity
0001,ABC43,00100
0002,D2ZAD,00020
....
其中每行具有相同的長度,那麼你可以移動到linesize*(linenumber+1)
,其中linenumber
是你想要去的路線。
否則,你需要遍歷整個文件,以獲得n
n行......它存在一個內置的模塊,名稱linecache
但是它可以幫助你:Go to a specific line in Python?
如果我這樣做,我認爲我會在每次讀取之後添加一個標記行 - 在文件再次保存之前,然後我會以字符串形式讀取文件,在標記上拆分,轉換回列表並將列表提供給進程。
非常感謝您的幫助。今天下午我會嘗試linecache。 – 10mjg
不要忘記接受答案,所以你的問題被標記爲「已解決」:) –
我有點好奇,一旦我使用linecache到達特定線路時如何繼續。 – 10mjg