我怎样才能更快地阅读行?

时间:2018-07-01 02:01:33

标签: python

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。

3 个答案:

答案 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一次将整个文件复制到内存中的情况。