[英]pickle a dictonary in python in a readable format
我在一個文件中有一個 python 字典,格式如下:
(dp0 S'Test' p1 S'Test1' p2 sS'Test2' p3 S'Test2' p4 sS'Starspy' p5 S'SHSN4N' p6 s。
請參閱: 在 Python 中將字典保存到文件(替代 pickle)?
我想把它讀回來。
根據鏈接中的問題,這是用pickle保存的。 但是,當我嘗試用 pickle 保存字典時,我獲得的格式不對應。
例如,代碼:
import pickle
mydict = {'a': 1, 'b': 2, 'c': 3}
output = open('myfile.dict', 'wb')
pickle.dump(mydict, output)
output.close()
生成一個包含內容的文件
€}q (X aqKX bqKX cqKu.
我可以讀回它,但它沒有我的文件格式(對應於嵌套字典)。 所以,我有兩個問題:
首先,我怎樣才能寫一個格式為 ... (dp0 S'Test' p1 S'Test1' p2 sS'Test2' p3 S'Test2' p4 sS'Starspy' p5 S'SHSN4N' p6 s. ?
其次,如何讀取該格式的文件?
如果你想要可讀的字典,那么使用json它內置在 python 中,輸出非常像字典。
該問題在pickle
模塊文檔中得到了回答: https : //docs.python.org/2/library/pickle.html#data-stream-format
目前有 3 種不同的協議可用於酸洗。
協議版本 0 是原始 ASCII 協議,向后兼容早期版本的 Python。
協議版本 1 是舊的二進制格式,它也與早期版本的 Python 兼容。
協議版本 2 是在 Python 2.3 中引入的。 它提供了更有效的新型類酸洗。
無論您在開始時顯示什么,它都是協議版本 0,並且是默認值。 最后——二進制協議版本 1 或 2。
只需指定協議版本號:
>>> pickle.dump({'hello': 'world'}, file('f.txt', 'wt'))
>>> file('f.txt', 'rt').read()
"(dp0\nS'hello'\np1\nS'world'\np2\ns."
>>> pickle.dump({'hello': 'world'}, file('f.txt', 'wt'), 2)
>>> file('f.txt', 'rt').read()
'\x80\x02}q\x00U\x05helloq\x01U\x05worldq\x02s.'
>>> pickle.dump({'hello': 'world'}, file('f.txt', 'wt'), 1)
>>> file('f.txt', 'rt').read()
'}q\x00U\x05helloq\x01U\x05worldq\x02s.'
PS:為什么不使用可讀格式,例如 json?
我遇到的問題是版本問題。 我使用的是版本 3,它適用於版本 2。
在這種情況下,我可以使用我想要讀取的文件中的格式創建一個文件,現在我可以讀取它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.