在Python中读取大文本文件

时间:2018-10-31 16:17:23

标签: python python-3.x file

我想从Python的文本文件中获取每一行(大约10亿行),并从每一行中获取一些单词并插入另一个文件中 我用过

with open('') as f:
   for line in f:
       process_line(line)

此过程要花费很多时间,如何处理才能在2个小时内读取所有内容?

2 个答案:

答案 0 :(得分:2)

脚本性能的瓶颈可能是由于它同时写入3个文件,从而导致文件之间的大量碎片化,因此产生大量开销。

因此,您无需在读完这些行的同时写入3个文件,而是可以缓冲一百万行(应占用少于1GB的内存),然后再将300万个字写入输出文件一次一个文件,这样它将产生更少的文件碎片:

def write_words(words, *files):
    for i, file in enumerate(files):
        for word in words:
            file.write(word[i] + '\n')

words = []
with open('input.txt', 'r') as f, open('words1.txt', 'w') as out1, open('words2.txt', 'w') as out2, open('words3.txt', 'w') as out3:
    for count, line in enumerate(f, 1):
        words.append(line.rstrip().split(','))
        if count % 1000000 == 0:
            write_words(words, out1, out2, out3)
            words = []
    write_words(words, out1, out2, out3)

答案 1 :(得分:0)

了解Python中的生成器。 您的代码应如下所示:

def read_file(yours_file):
    while True:
        data = yours_file.readline()
        if not data:
            break
        yield data