我目前正在處理我的第一個Python項目,並且需要通過2GB文件進行解析。 我發現,如果我去了一行行那將是非常非常慢... 然而緩衝方法,使用:在Python中通過大文件搜索字符串
f = open(filename)
lines = 0
buf_size = 1024 * 1024
read_f = f.read
buf = read_f(buf_size)
while buf:
for line in buf:
#code for string search
print line
buf = read_f(buf_size)
這裏打印線不打印「線」,它每行只打印一個字符。所以我有問題做子串查找... 請幫助!
「for line」與文件一起工作,因爲文件迭代器的構建是爲了將輸入分解爲行。你在這裏創建的字符串迭代器是爲了將字符串分解成字符而構建的。使用更大的文件緩衝區可以獲得更好的性能,但我無法對此做出任何承諾!返回逐行迭代文件並嘗試使用128K緩衝區'open(filename,「r」,128 * 1024)'。 – tdelaney
注意:你可以使用['iter(callable,sentinel)'](http://docs.python.org/3/library/functions.html#iter)來避免while循環: (lambda:f.read(1024 * 1024),''):#搜索子字符串。在這種情況下,'iter'將創建一個迭代器,調用它的'callable'參數(即'callable()')直到找到'sentinel'值。無論如何,閱讀2GB文件*將需要一些時間。假設您的硬盤可以以200 MB/s的速度讀取,至少需要10個secons *,我相信硬盤通常在50到150 MB/s之間! – Bakuriu