2016-04-22 23 views
-1

我的代碼通常運行幾天,並將Python中的字符串和浮點變量作爲中間結果進行處理。我不能將所有中間值附加到Python列表中,並在運行後一次性使用pickle等將所有輸出保存到物理文件中。這是因爲,如果出現中斷,我可能會丟失迄今收集的所有數據。在磁盤中保存多個字典和變量

所以我必須定期轉儲(並追加)多個字典和其他變量。做這個的最好方式是什麼 ?我已經看過JSON(但不知道如何從單個文件中存儲(以及後來讀取)多個JSON對象。我可以將數據追加到pickle文件嗎?將這些數據保存在一個簡單的文本文件或csv文件中。我不得已

+0

您可以附加鹹菜一個文件,然後讀取它們一個接一個,直到你選串得到'EOFError',就像這個[code](https://github.com/ciupicri/bac-parser/blob/f00d9562f9a8f4f9bf475fb3773db34ee12021e5/pickle2csv.py#L38)。 –

回答

0

這也取決於你的需求

  1. 是否追加數據需要參考前一個

    • 如果是的話,你可以不被可能的文件處理程序錯誤承擔數據丟失的原因,你可能會考慮到保持數據在SQLite數據庫,Python帶有它
    • 如果沒有,你可以只是簡單創建新的JSON文件,問題解決了,把它們合併使用泡菜

      • 我也發現了一些StringIO的泡菜文件,以及剛纔提到的需要處理的文件進行寫,不知道什麼時候需要
    • 它是否支持「追加」,是否只是直接追加二進制數據/使用python文件處理程序追加或系統>>

4

使用json這是一個良好的變體養護與編輯文件的能力:

import json 

list_of_dict = [ 
    {'a': 1}, 
    {'b': 2} 
] 

with open('filename.json', 'w') as f: 
    json.dump(list_of_dict, f, sort_keys=True, indent=4) 
+0

這意味着我將所有的字典編譯成單個列表,然後將其寫入JSON文件,這是我無法承受的。是否有可能將多個JSON對象連續附加到單個文件中,然後解析此文件以將所有JSON對象重新加載到Python列表中? – user1050648