pickletools --- pickle 開發者工具集?
源代碼: Lib/pickletools.py
此模塊包含與 pickle 模塊內部細節有關的多個常量,一些關于具體實現的詳細注釋,以及一些能夠分析封存數據的有用函數。 此模塊的內容對需要操作 pickle 的 Python 核心開發者來說很有用處;pickle 的一般用戶則可能會感覺 pickletools 模塊與他們無關。
命令行語法?
3.2 新版功能.
當從命令行發起調用時,python -m pickletools 將對一個或更多 pickle 文件的內容進行拆解。 請注意如果你查看 pickle 中保存的 Python 對象而非 pickle 格式的細節,你可能需要改用 -m pickle。 但是,當你想檢查的 pickle 文件來自某個不受信任的源時,-m pickletools 是更安全的選擇,因為它不會執行 pickle 字節碼。
例如,對于一個封存在文件 x.pickle 中的元組 (1, 2):
$ python -m pickle x.pickle
(1, 2)
$ python -m pickletools x.pickle
0: \x80 PROTO 3
2: K BININT1 1
4: K BININT1 2
6: \x86 TUPLE2
7: q BINPUT 0
9: . STOP
highest protocol among opcodes = 2
編程接口?
-
pickletools.dis(pickle, out=None, memo=None, indentlevel=4, annotate=0)? 將 pickle 的符號化反匯編數據輸出到文件類對象 out,默認為
sys.stdout。 pickle 可以是一個字符串或一個文件類對象。 memo 可以是一個將被用作 pickle 的備忘記錄的 Python 字典;它可被用來對由同一封存器創建的多個封存對象執行反匯編。 由MARK操作碼指明的每個連續級別將會縮進 indentlevel 個空格。 如果為 annotate 指定了一個非零值,則輸出中的每個操作碼將以一個簡短描述來標注。 annotate 的值會被用作標注所應開始的列的提示。3.2 新版功能: annotate 參數。
-
pickletools.genops(pickle)? 提供包含 pickle 中所有操作碼的 iterator,返回一個
(opcode, arg, pos)三元組的序列。 opcode 是OpcodeInfo類的一個實例;arg 是 Python 對象形式的 opcode 參數的已解碼值;pos 是 opcode 所在的位置。 pickle 可以是一個字符串或一個文件類對象。
-
pickletools.optimize(picklestring)? 在消除未使用的
PUT操作碼之后返回一個新的等效 pickle 字符串。 優化后的 pickle 將更為簡短,耗費更為的傳輸時間,要求更少的存儲空間并能更高效地解封。
