fv13303118 2 918384 FR
fv6665000 2 924898 AS
fv2341362 2 927309 AF
fv9777703 2 928836 TC
fv1891910 2 932457 SG
fv9697457 2 934345 GG
fv35940137 2 940203 GG
fv3128117 2 944564 TT
fv2465126 2 947034 AG
我有超过50 GB的文本文件。我将对其进行处理,而我只需要阅读“ fvxxxxx”部分。
lines = f.readlines()
for x in lines:
blabla()
我认为这绝对不是最快的方法
编辑-
实际上有2000多个文件。每个文件为20 MB。我只想阅读前11个字母,然后跳到下一行。我的内存限制为4 GB。
答案 0 :(得分:4)
readlines()
将输入流中的所有内容读取到一个列表中,由于输入的大小大大超过了内存大小,因此效率极低。
您应该将文件对象用作迭代器,以便它以节省内存的方式一次读取一行:
for x in f:
blabla()
答案 1 :(得分:1)
默认情况下,标准的open()函数应返回一个缓冲文件。
类似的东西:
with open(<FILE>) as FileObj:
for line in FileObj:
x = line.strip().split()[0]
print x
已编辑:满足仅打印行的第一部分的要求。
答案 2 :(得分:1)
您可以使用上下文管理器open()
来with open('file.txt') as in_file:
for line in in_file:
fx, *rest = line.strip().split()
print(fx)
文件,循环遍历文件对象,在空白处分割每一行,并采用第一个元素:
fv13303118
fv6665000
fv2341362
fv9777703
fv1891910
fv9697457
fv35940137
fv3128117
fv2465126
哪个会给你:
readlines()
上述方法的好处是它使用文件对象作为迭代器,从而避免了使用div
一次将整个文件复制到内存中的情况。