Python 我怎样才能读得更快?

Python 我怎样才能读得更快?,python,Python,我有超过50 gb的文本文件。我会处理它,我只需要阅读fvxxxxx部分 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

我有超过50 gb的文本文件。我会处理它,我只需要阅读fvxxxxx部分

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
我认为这绝对不是最快的方式

编辑-

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

readlines将输入流中的所有内容读取到一个列表中,这可能会非常低效,因为输入的大小大大超过内存大小

您应该将file对象用作迭代器,以便它能够以节省内存的方式一次读取一行:

lines = f.readlines()
for x in lines:
    blabla()
readlines将输入流中的所有内容读取到一个列表中,这可能会非常低效,因为输入的大小大大超过内存大小

您应该将file对象用作迭代器,以便它能够以节省内存的方式一次读取一行:

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

默认情况下,标准打开函数应返回缓冲文件

比如:

for x in f:
    blabla()

已编辑:以满足仅打印行的第一部分的要求。

默认情况下,标准打开功能应返回缓冲文件

比如:

for x in f:
    blabla()
已编辑:以满足只打印行的第一部分的要求。

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

with open(<FILE>) as FileObj:
    for line in FileObj:
        x = line.strip().split()[0]
        print x
这将给你:

with open('file.txt') as in_file:
    for line in in_file:
        fx, *rest = line.strip().split()
        print(fx)
上述方法的好处是,它使用file对象作为迭代器,从而避免了使用readline将整个文件一次复制到内存中

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

with open(<FILE>) as FileObj:
    for line in FileObj:
        x = line.strip().split()[0]
        print x
这将给你:

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

上述方法的好处是,它使用file对象作为迭代器,从而避免了使用readline将整个文件一次复制到内存中

文件是否用空格分隔?是否保证每行都有特定的长度?每行中的第一个字段是否保证为特定长度?在读取文件时,您可以使用多少内存?如果它们是字段格式的规范,您应该在问题中包括它们。文件是否由空格分隔?是否保证每行都有特定的长度?每行中的第一个字段是否保证为特定长度?在读取文件时,您可以使用多少内存?如果它们是字段格式的规范,你应该把它们包括在问题中。我能读前11个字母并跳到下一行吗?这意味着不能缓存所有的文件,但不能像我希望的那样快,因为最终会读取所有的行。不,因为您想读取下一行的事实意味着您必须读取一行中的所有字符,才能找到下一个换行符。@Tuğberk行的宽度是否固定?如果是这样,你可以用f。seek@Tuğberk只需像x.split[0]那样来获得第一个单词-按space@jedwards他说得很有道理。如果所有行的长度都相同,那么你可以使用f.readlength\u of_first\u column和f.seekline\u number*length\u of_每行跳转到下一行。我能读前11个字母并跳到下一行吗?这意味着不能缓存所有的文件,但不能像我希望的那样快,因为最终会读取所有的行。不,因为您想读取下一行的事实意味着您必须读取一行中的所有字符,才能找到下一个换行符。@Tuğberk行的宽度是否固定?如果是这样,你可以用f。seek@Tuğberk只需像x.split[0]那样来获得第一个单词-按space@jedwards他说得很有道理。如果所有行的长度相同,则可以使用f.readlength_of_first_column,然后使用f.seekline_number*length_of_每行跳转到下一行。