繁体   English   中英

python写文本到文件比用python打印文本到终端要慢?

[英]python write text to file slower than printing text to terminal with python?

我正在编写一个程序,该程序需要一个字符串并计算该字符串的所有可能重复排列。 我将展示一些代码片段,如果有人可以指出如何将数据发送到文件时提高速度,我将不胜感激。

场景1

将输出发送到stdout大约需要12秒,以写入531,441行(3mb)

import itertools 
for word in itertools.product(abcdefghi,repeat = 6):
    print(word)

方案2

然后,我尝试将输出发送到文件而不是标准输出,这大约花费了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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM