我有一個相當大的二進制格式的pickle(dict)文件,每次從它上面查找分數時都需要幾秒鐘來加載。我想知道是否可以在內存中加載文件一次,然後查看它直到我退出程序。此外,如果有任何其他方法來加快我的搜索。
非常感謝提前。將文件內容保存在內存中
1
A
回答
2
當我遇到這種問題時,我通常會創建一個函數並用memoize裝飾器來裝飾它。尋找「memoize的」關於http://wiki.python.org/moin/PythonDecoratorLibrary
例如:
@memoized
def get_dict():
return pickle.load(file)
foo = get_dict()['foo']
使用記憶化在這裏不是做它裝載的讓所以如果你最終在程序的某些用途不使用文件懶洋洋地出現這種情況,你不要支付加載它的成本。
此外,像其他海報建議你應該使用的cPickle:
import cPickle as pickle
您也可以考慮打破了大詞典起來了,也許經常在一個泡菜和其他較少使用的數據使用的數據。
1
shelve是一種替代方案。
2
加載數據,然後傳遞該引用,而不是每次查找分數時再次加載它。現在,我不知道你的代碼是什麼樣子,但一個簡單的例子:
def lookup(data):
// do stuff with data
data = Pickle.load("file")
lookup(data)
1
使用的cPickle模塊,而不是泡菜將加速鹹菜機制,但在內存中保存拆封字典是一個好主意。
0
將你的代碼寫入模塊(主要是把它放在一個單獨的文件中),然後加載模塊,無論你需要做什麼查找。
讓模塊初始化其變量data
變量。這隻會在第一次導入時發生。如果程序的其他部分import
是同一模塊,系統緩存版本將自動使用,並且其中的代碼將不會再次運行。
mymodule.py
import pickle
data = pickle.load(open("picklefile", "rb"))
program.py
import mymodule
value = mymodule.data[key]
相關問題
- 1. 保存內容與文件放內容
- 2. 將內容保存爲html文件
- 3. Spring會將內容保存在內存中還是保存在磁盤中?
- 4. 保存內容
- 5. 強制OpenGL將內容保存在內存中?
- 6. NSData在保護文件時將整個文件內容保存在內存中時進行流式傳輸嗎?
- 7. 如何將文件系統的內容保存到文件中
- 8. 將WebBrowser控件內容保存爲HTML
- 9. 如何在.NET中將POST請求內容保存爲文件
- 10. 將圖像內容保存在html文件中
- 11. 保存的UITextView內容doc文件
- 12. Android內容保存
- 13. 將持久文本文件保存在內部存儲器中
- 14. 在Python中將RAR文件的內容讀入內存中
- 15. 無法將webtable內容保存到qtp中的excel文件中
- 16. 將文件存儲在內存中
- 17. 保存在內部存儲中的文件沒有被保存
- 18. 將變量的內容保存到文件中
- 19. 如何將我的XAML內容保存到文件中?
- 20. Rails:將二進制字段的內容保存到文件中
- 21. 從RSS中提取內容並將其保存爲新文件
- 22. 如何將ArrayList的內容保存到文件中?
- 23. SaveFileDialog將文件夾保存在內存中
- 24. 如何將文件保存在手機內存中?
- 25. 將公共文件保存在內部存儲器中
- 26. 將temparay信息保存在內存中
- 27. 將數據保存在內存中
- 28. 如何保存文本框的內容在文件中
- 29. 在DB中存儲文件內容
- 30. 將文本文件內容保存到鏈接列表