关于python:如何更快地读取行?

How can I read line faster?

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
9
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"部分。

1
2
3
lines = f.readlines()
for x in lines:
    blabla()

我认为这绝对不是最快的方法

编辑-

实际上有2000多个文件。每个文件都是20 MB。我只想读前11个字母,然后跳到下一行。我的内存限制是4 GB。


readlines()将输入流中的所有内容都读取到一个列表中,由于输入的大小大大超过了内存大小,因此该列表的效率可能非常低。

您应该将文件对象用作迭代器,以便它以内存高效的方式一次读取一行:

1
2
for x in f:
    blabla()


您可以使用上下文管理器来open()文件,循环文件对象,在空白处拆分每一行,并获取第一个元素:

1
2
3
4
with open('file.txt') as in_file:
    for line in in_file:
        fx, *rest = line.strip().split()
        print(fx)

这将给你:

1
2
3
4
5
6
7
8
9
fv13303118
fv6665000
fv2341362
fv9777703
fv1891910
fv9697457
fv35940137
fv3128117
fv2465126

上述方法的好处在于,它使用文件对象作为迭代器,避免了使用readlines()同时将整个文件复制到内存中。


默认情况下,标准open()函数应返回缓冲文件。

类似:

1
2
3
4
with open(<FILE>) as FileObj:
    for line in FileObj:
        x = line.strip().split()[0]
        print x

编辑:满足您只打印行的第一部分的要求。