2017-02-02 70 views
0

我有一個函數返回collections.OrderedDict()這是http post的有效載荷。如何將OrderedDicts寫入文件並將其讀回列表?

我需要在http發佈失敗時記錄脫機數據,所以我想將所有的字典寫入一個文件並將其作爲列表讀回,我知道我可以創建一個列表並繼續追加到列表中,但需要是寫入文件和讀回一個列表,

可能有人請幫我解決這個問題,請建議,如果有一個更好的主意來檢索字典的項目,如列表

+0

你很樂意做到這一點,而不使用文件? –

+1

'list(dictionary.items()' –

+0

感謝彼得的回覆,文件寫入是強制性的,因爲字符可能會變成數萬,並且不建議列表:( –

回答

0

你可以轉換一個字典列表json並將其保存到.json文件。 然後,閱讀它將是小菜一碟。

from collections import OrderedDict 
import json 
dic = OrderedDict() 
dic['hello'] = 'what up' 
dic_2 = OrderedDict() 
dic_2['hey, second'] = 'Nothing is up' 

with open('file.json', 'w') as f: 
    dictionaries = [dic, dic_2] 
    f.write(json.dumps(dictionaries)) 
with open('file.json', 'r') as read_file: 
    loaded_dictionaries = json.loads(read_file.read()) 
    print(loaded_dictionaries[0]) 

輸出:

{'hello': 'what up'} 

乾淨只要這將作爲字典鍵/值是這些類型的:dict, list, str, int, float, bool, None

+0

感謝你的迴應,隨着時間的推移,字典對象不斷增長,每當我離線我想轉儲到一個文件的字典,一旦我在線,我想發送到服務器 –

+0

無論何時您需要更新它,只需再次打開文件,讀取文件,以便從中獲得一個「列表」,追加到列表中,使用'json.dumps(將該列表轉換爲json)列表)'並將其寫入文件 – Nether

+0

我一直讀錯了所有的時間都沒有將列表更改回json,現在我使用json.loads將文件讀回列表並追加新的字典,然後寫回我們最後,當我需要傳遞字典時,我只是用json.loads讀取整個文件併發送它,您的解決方案效果很好,謝謝@Nether –

2

使用json進行數據序列化。

import json 
import collections 

d = collections.OrderedDict([('a', 1), ('b', 2), ('c', 3)]) 

s = json.dumps(list(d.items())) 
print(s) 

value = json.loads(s) 
print(value) 

json將對象序列化爲字符串'[["a", 1], ["b", 2], ["c", 3]]'。然後json可以將數據讀回python對象。

json非常常見,並且在很多語言中都有使用。大多數web apis都使用json來幫助他們的應用程序實現RESTful。

+0

感謝您的回覆,字典隨着時間的推移不斷增長,並且我需要附加文件,每次我得到字典對象,請建議如果你有替代 –

+0

我將不得不看到一些代碼。如果你有多個字典,然後調用'dict.update(other_dict)'這將合併字典。 – HashSplat

相關問題