Re: [問題] 大量文字輸出文字檔

看板Python作者 (十年一夢)時間10年前 (2013/09/15 18:19), 編輯推噓1(102)
留言3則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《largesperm (reindeer)》之銘言: : 請教一下 : 假設我現在要把一些結果輸出為文字檔 : 我先把所有的文字先 append 到空 list : 最後才一次 "".join() : 如果我想要輸出的結果太多了 : 他會顯示 MemoryError : 可是我看 list 裡面的東西也沒有到非常多 大概幾百萬個元素 : 每一行大概就一個螢幕寬 : 我沒記錯的話 32bits 的 list 應該可以塞到億個元素 : 沒有出現 MemoryError 的檔案大概 100 多 mb : 出現 MemoryError 的地方不是在輸出的那一刻 : 而是在 append 的時候出現 : 不曉得有什麼方式可以改善 : 謝謝 幾百萬個?! 這可以簡單算一下,假設 list 塞一百萬個 element 來說,在 32-bit Python 環境, 這個 list 本身就要用掉 4 MB(尚未算這些 element 所使用的記憶體量)。 假如你使用 Python 3,list 內的 element 是 str object,若這一百萬個 str object 都是長度為 1 的字串,那麼"至少"要用掉 2 MB or 4 MB(視 sys.maxunicode 的值而定),你說每個 element(str)長度大概是一個螢幕寬,比較保守來算為 100 字元,那就是用掉 200 or 400 MB。 在 join 那一刻,瞬間記憶體用量要再多一倍(400 or 800 MB)。 這只是以 100 萬來算,假如那 list 塞到 500 萬個,就會達到 2 or 4 GB。 *這些計算尚未考慮實作 str object 的 overhead。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.173.232.35 ※ 編輯: sbrhsieh 來自: 218.173.232.35 (09/15 18:22)

09/15 18:46, , 1F
原來如此 我剛剛檢查了一下 雖然是幾百萬行
09/15 18:46, 1F

09/15 18:47, , 2F
但是每行再乘上每行字數 的確會破億 快達到 list
09/15 18:47, 2F

09/15 18:47, , 3F
的極限
09/15 18:47, 3F
文章代碼(AID): #1IDOcMfa (Python)
文章代碼(AID): #1IDOcMfa (Python)