如何更改 Python 中的 pickle 数据库?

How to alter the pickle database in Python?

我有一个 pickle 数据库,我正在使用以下代码读取它

import pickle, pprint
import sys

def main(datafile):
    with open(datafile,'rb')as fin:
        data = pickle.load(fin)

    pprint.pprint(data)

if __name__=='__main__':
    if len(sys.argv) != 2:
        print "Pickle database file must be given as an argument."
        sys.exit()
    main(sys.argv[1])

我认出里面有字典。我想 delete/edit 这本字典中的一些值并创建一个新的 pickle 数据库。 我将这个程序的输出存储在一个文件中(这样我就可以读取字典中的元素并选择要删除的元素)我如何读取这个文件(pprinted 数据结构)并从中创建一个 pickle 数据库?

Python docs 所述 pprint 保证将对象转换为有效(在 Python 语法意义上)对象,只要它们可表示为 Python常数。所以第一件事是,只要你为字典、列表、数字、字符串等做,你所做的就很好。特别是如果字典深处的某些值不能表示为常量(例如自定义对象)这会失败。

现在读取输出文件应该很简单了:

import ast
with open('output.txt') as fo:
    data = fo.read()
obj = ast.literal_eval(data)

这是假设您为每个文件保留一个对象,仅此而已。

请注意,您可以使用内置 eval 而不是 ast.literal_eval,但这是非常不安全的,因为 eval 可以 运行 任意 Python 代码。