我有一段代碼,它在每次迭代中生成相當大的列表。爲了節省內存,我想在列表生成後,在每次迭代中將每個列表寫入二進制文件。 我試過這個文本文件(甚至在linux中將參數設置爲「wb」)。 「wb」似乎對用二進制或文本格式寫入的文件沒有任何影響。此外,書面文件是巨大的,我不想這樣。我相信如果我可以用二進制格式寫這些列表,這個文件將會小得多。 謝謝如何將「逐個」列表寫入Python中的二進制文件?
1
A
回答
4
既然您提到需要壓縮性,我建議使用pickle
和gzip
模塊來壓縮輸出。你可以寫,並一次讀回您的名單之一,這裏有一個如何的例子:
import gzip, pickle
output = gzip.open('pickled.gz', 'wb', compresslevel=9)
for x in range(10):
output.write(pickle.dumps(range(10)) + '\n\n')
output.close()
,然後使用一個發電機來產生列表回一個時間:
def unpickler(input):
partial = []
for line in input:
partial.append(line)
if line == '\n':
obj = ''.join(partial)
partial = []
yield pickle.loads(obj)
input = gzip.open('pickled.gz', 'rb')
for l in unpickler(input):
print l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
1
您可以使用cPickle序列化您的列表並將結果轉儲到文件。
1
'b'
標誌更改的唯一情況是如何完成換行以支持Windows。
import pickle
help(pickle.load)
help(pickle.dump)
# seems fairly efficient, taking 200bytes to store [1,2,...,100],
# 2.7kb to store [1,2,...,1000],
# and 29kb to store [1,2,...,10000]:
>>> len(pickle.dumps(list(range(100))))
208
>>> len(pickle.dumps(list(range(1000))))
2752
>>> len(pickle.dumps(list(range(10000))))
29770
#create and store
data = {}
data['myList'] = [i for i in range(100)]
with open('myfile.pickle', 'wb') as f:
pickle.dump(data, f)
# retrieve
with open('myfile.pickle', 'wb') as f:
data2 = pickle.load(f)
print(data2)
請注意,在任何用戶提供的數據上使用pickle
是不安全的。您將希望以二進制模式打開正在寫入的文件。
相關問題
- 1. Python:將int寫入二進制文件
- 2. 如何在Python中將BitArray寫入二進制文件
- 3. 如何將十六進制值寫入列表到文件Python
- 4. 如何使用Python將數據寫入二進制文件
- 5. 寫入二進制文件python
- 6. 將列表寫入二進制文件時的問題
- 7. 如何將十六進制值寫入二進制文件
- 8. 寫入二進制文件?
- 9. 寫入二進制文件
- 10. 寫入二進制文件
- 11. 寫入二進制文件
- 12. 如何將二進制數據寫入ios中的文件
- 13. 將位寫入二進制文件
- 14. 將cv :: Mat寫入二進制文件?
- 15. 將0寫入二進制文件C++
- 16. 將二進制數據寫入文件
- 17. 如何將二進制文件(不是UTF-8)寫入文件
- 18. 如何使用PHP將「僞」二進制文件寫入文件?
- 19. 如何逐行將子列表寫入文本文件?
- 20. 如何在Python中將二進制數據寫入文本文件?
- 21. 如何將列表列表寫入cgi/python中的文件?
- 22. 如何在PowerShell中將二進制Stream對象寫入文件?
- 23. 如何在C#中將對象寫入二進制文件?
- 24. 將列表寫入python中的文件?
- 25. python將一個列表寫入文件
- 26. Python寫入二進制
- 27. 將二進制文件逐行讀入文本框
- 28. 如何在python中將列表列表寫入文件?
- 29. 如何將二進制數據寫入R的csv文件
- 30. 在Ruby中寫入二進制文件
什麼類型列表項目?正在使用NumPy一個選項? – 2011-05-11 15:03:51
沒有「[二進制格式]」這樣的東西。有些格式在任何編碼中都不像文本(分別不應該)。然而,這裏有很多這樣的格式和無數可能的格式。 **你想要什麼**二進制格式? – delnan 2011-05-11 15:07:32
@Sven:最終這個列表將作爲特徵向量輸入到分類器 – Hossein 2011-05-12 08:27:53