2017-04-06 51 views
0

我有一个巨大的单行文件,只包含空格分隔的单词。我想运行一些额外的过滤。如何快速做到这一点?Python:如何处理一个巨大的单行文件?

目前,我有以下代码:

with open("words.txt") as f: 
    lines = f.readlines() 

    for line in lines: 
     words = str(line).split(' ')   

     for w in words: 
      if is_allowed(w): 
       another_file.write(w + " ") 

但它是extremelly慢(〜1MB /秒)。如何加快速度?

回答

1

鉴于您将文件描述为“巨大”,问题很可能是您的代码需要将整个文件一次加载到内存中,然后复制它以执行拆分操作。

如果将文件视为流,它应该快得多。按字符阅读(char = f.read(1));如果字符不是空格或EOF以外的任何字符,请将其附加到临时字符串。当你击中一个空间时,处理你的临时字符串,然后将其删除并重新开始;当你击中EOF时,处理你的临时字符串,然后打破你的循环。

这样一来,在任何特定时刻,您都不应该在内存中拥有多于一个单词,这会大大加快您的处理速度。