我想从Python的文本文件中获取每一行(大约10亿行),并从每一行中获取一些单词并插入另一个文件中 我用过
with open('') as f:
for line in f:
process_line(line)
此过程要花费很多时间,如何处理才能在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