簡體   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