2014-01-18 44 views
0

我不知道這將是多麼先進,但我試圖產生一個巨大的排列列表,然後解析它們以特定的方式打印它們。我遇到的問題是,當我使用以下行: x=([''.join(i) for i in itertools.product("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890",repeat=8)])在生成大變量時寫入文件以繞過內存上限。 Python 3.3

我遇到了問題,我的電腦是32位或只有4演出的RAM。所以我想知道是否有辦法在中途停止這條線,將所有生成的文件寫入一個txt文件,然後繼續。這個想法是這樣的,變量存儲在磁盤而不是RAM中。之後我會解析txt文件以獲得我正在尋找的情況。順便說一句,我在Windows 7上。 謝謝!

+2

有超過218萬億這些東西:你沒有足夠的磁盤空間寫出超過一小部分。 –

+1

你爲什麼需要這樣做?這聽起來像是你的蠻橫 - 強迫一個問題能夠以另一種方式更好地解決。 – user2357112

回答

0

只需將其分解爲其組件並保存即可。喜歡的東西:

for i in itertools.product(string.ascii_letters + string.digits, repeat=8): 
    print(''.join(i)) 
+0

這工作得很好,我可以看到正在生成的文本。我不知道我是如何忽略使用for循環的。謝謝! – Radeon348

2

首先要注意:

>>> len("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890") ** 8 
218340105584896L 
>>> format(_, ",") 
'218,340,105,584,896' 

這多少產品也有。寫出來,每個需要8個字節加一個換行符(或其他分隔符)。

>>> 62 ** 8 * 9 
1965060950264064L 

因此,如果您購買大約2,000個1TB的磁盤,則只需要足夠的磁盤空間來存儲它們。

還想走這條路嗎? ;-)一旦你購買了所有的硬件:

import itertools 
s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" 
with open("perms.txt", "w") as f: 
    for i in itertools.product(s, repeat=8): 
     f.write("".join(i) + "\n") 

將使用很少的RAM來做到這一點。

+0

我不知道它是什麼,但是當我試圖寫文檔時,程序會永久運行並且記事本會崩潰。下面的解決方案的人,給我即時的結果,這就是我喜歡的。謝謝你的解釋! – Radeon348

+1

想想!有萬億和萬億以及萬億的結果。您沒有足夠的RAM或磁盤空間來存儲所有這些內容的一小部分。除了NSA之外,沒有人會這麼做;-)在任何程序生成所有結果完成之前,我們都會死去。你給出的兩種解決方案是相同的,除了我給你打印的文件和另一個打印到標準輸出。他們都不會在你的一生中完成。 –

相關問題