2017-02-23 74 views
0

我有一個Python腳本需要讀取非常大的文本文件的一部分,從第N行開始到第N + X行結束。 我不想使用「打開('文件')」,因爲這會將整個內容寫入內存,這會花費太長時間,並浪費太多內存。 我的腳本在Unix機器上運行,所以我目前使用本機的頭部和尾部的功能,即:讀取文件中的前N行而不打開它(Python)

section = subprocess.check_output('tail -n-N {filePath} | head -n X') 

,但感覺必須有這樣做的一個更聰明的方式.. 是有辦法在Python中獲取第N行到第N + X個文本文件而不打開整個文件?

謝謝!

+0

from itertools import islice N = 2 X = 5 with open('large_file.txt') as f_input: for row in islice(f_input, N-1, N+X): print row.strip() 

此跳過所有的初始行,只是返回你感興趣的行*「我不想使用「open('file')」,因爲這會將整個事件寫入內存,這會花費太長時間,並浪費太多內存。「*這不是'open'所做的;用它。 – Ryan

回答

2

Python的islice()作品以及這樣做的:

3

的回答你的問題所在位置:How to read large file, line by line in python

with open(...) as f: 
    for line in f: 
     <do something with line> 

with語句處理打開和關閉文件,其中包括如果 異常在內部塊中引發。 f中的for行將 作爲可迭代的文件對象f,它會自動使用緩衝的IO 和內存管理,因此您不必擔心大文件。

相關問題