python 将文本写入文件比使用 python 将文本打印到终端慢?

标签 python

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

场景一

将输出发送到标准输出大约需要 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 时将数据附加到文件。

我使用网络上的一个程序来执行此操作,我发现该程序在将数据打印到终端时花费了相同的时间,而同样的网络程序花费了大约 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次,然后结束。

每次的工作量很小,但是当你做这么多次时,就会累加起来。

关于python 将文本写入文件比使用 python 将文本打印到终端慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24945185/

相关文章:

python - 用股票报价识别 Pandas 数据框中的价格波动/趋势

python - 在 Pycharm 中查找依赖于导入包的所有引用

python - 我怎么知道 Pandas 数据框单元格的类型

python - 从本地 gearman 客户端调用远程 gearman 工作人员?

python - 导入模块中的全局变量

Python NetworkX 从关联矩阵创建图形

python - 从 pydantic 对象列表中删除重复项

python - 普通函数和生成器函数有什么区别?

python - 如何计算 Pandas 多索引的真假?

python - 如何正确指定参数以在 Django admin 中显示方法的输出?