处理大小约为500 MB的文本文件的每一行的最佳解决方案是什么?
我曾经想过的建议:
def files(mon_fichier):
while True:
data = mon_fichier.read(1024)
if not data:
break
yield data
fichier = open('tonfichier.txt', 'r')
for bloc in files(fichier):
print bloc
提前谢谢
答案 0 :(得分:11)
with open('myfile.txt') as inf:
for line in inf:
# do something
pass
答案 1 :(得分:7)
只要您远离readlines
而只使用readline
,只需使用标准文件操作即可。
答案 2 :(得分:1)
答案取决于您想要对数据做什么...... 我建议按块阅读,并在读完后阅读每个块:
fs = open(source, 'r')
while 1:
txt = fs.readline(1000)
< your treatement>
if txt =="":
break
fs.close()
答案 3 :(得分:0)
据我了解这些过程,文件的读取通过缓冲区进行。
在这种情况下,mon_fichier.read(1024)
不直接从文件中获取1024个字节,而是从缓冲区获取,直到此文件将耗尽,然后缓冲区将再次填充新的实际读数,例如, 4096或8192或16384或......字节,我不确切知道(认为它是2的幂,但即使不确定)
然后,如果你真的想要处理字节块,我认为philnext的代码更可取。但是如果要获取正好1000个字节,readline(1000)
必须替换为read(1000)
; readline(1000)
返回一行,即使该行长度为4个字符,也不会再返回。
按块处理文件可能是你真正想做的事情,但对我来说这似乎并不常见。按行处理文件的频率更高,在这种情况下,Hugh Bothwell的代码是正确的方式。