[英]python write text to file slower than printing text to terminal with python?
我正在编写一个程序,该程序需要一个字符串并计算该字符串的所有可能重复排列。 我将展示一些代码片段,如果有人可以指出如何将数据发送到文件时提高速度,我将不胜感激。
将输出发送到stdout大约需要12秒,以写入531,441行(3mb)
import itertools
for word in itertools.product(abcdefghi,repeat = 6):
print(word)
然后,我尝试将输出发送到文件而不是标准输出,这大约花费了5分钟。
import itertools
word_counter=0
for word in itertools.product(abcdefghi,repeat = 6):
word_counter=word_counter+1
if word_counter==1:
open('myfile', 'w').write(word)
else:
open('myfile', 'a').write(word)
当函数循环时, word_counter
跟踪重复排列的数量。 当word_counter
为1时,程序将创建文件,然后在word_counter大于1时将数据追加到文件中。
我使用网络上的程序来执行此操作,但发现该程序在将数据打印到终端时花费了相同的时间,而同一网络prgoram花费了大约3秒钟将这些组合输出到文件中,而我的程序花费了5分钟才能输出数据到文件!
我还尝试运行程序并将输出重定向到bash终端中的文件,这花费了相同的时间(3秒)!
'myprog' > 'output file'
您正在为每次写入重新打开文件,请尝试不要这样做:
import itertools
output = open('myfile', 'w')
for word in itertools.product(abcdefghi, repeat=6):
output.write(word + '\n')
[编辑说明]当您使用530,000个单词时,即使每个单词的速度变慢一点,整个程序的总速度也会变慢。
以我的方式,您需要完成一项设置工作(打开文件)并将其存储在内存中,然后遍历500,000个单词并保存它们,然后进行一项整理工作(关闭文件)。 这就是文件保存在变量中的原因-因此您可以设置一次,然后一次又一次地使用它。
用这种方法,您几乎没有做任何设置工作,然后将一个计数器添加了500,000次,检查计数器的值500,000次,以这种方式或那次分支500,000次,打开文件并强制Windows(或Linux)检查您每次的权限,将其保存在内存中500,000次,写入其中500,000次,停止使用您打开的文件(因为您没有保存它),因此它属于“垃圾”并被整理-500,000次,并且然后完成。
每次的工作量都很小,但是当您做很多次时,它的总和就增加了。
与先前的答案相同,但具有上下文!
import itertools
with open('myfile', 'w') as output:
for word in itertools.product(abcdefghi, repeat=6):
output.write(word + '\n')
上下文的好处是可以自己清理并处理错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.