如何更改 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 代码。
我有一个 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 代码。