簡體   English   中英

以可讀格式在python中腌制字典

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM