说,我有一个 python 列表:
arr = [
[1,2,3,4],
[11,22,33,44]
]
我想将此对象转储到带有代码的文件中,以便我可以eval()
尽快将其返回,文件的内容应该是:
[
[1,2,3,4],
[11,22,33,44]
]
我不想使用pickle
,因为它太慢了。
说,我有一个 python 列表:
arr = [
[1,2,3,4],
[11,22,33,44]
]
我想将此对象转储到带有代码的文件中,以便我可以eval()
尽快将其返回,文件的内容应该是:
[
[1,2,3,4],
[11,22,33,44]
]
我不想使用pickle
,因为它太慢了。
print repr(arr)
.
当然,泡菜并不是特别慢。而且,正如 zhangyangyu 所指出的,虽然这适用于列表,但它不适用于repr
无法eval
'd 的对象。
我认为您可以使用repr
, 然后将结果写入文件。
代表(...)
代表(对象)-> 字符串
返回对象的规范字符串表示。
对于大多数对象类型,eval(repr(object)) == object。
但这并不安全,如果文件被更改,可能会发生可怕的事情。
更重要的是,您文件中的列表似乎是格式。当这种情况发生时,您如何将其转换回来。当您读回内容时,您必须添加逻辑以查看字符串是否表示列表结束。如果他们在一条线上,可能会更容易。
所以,使用一些现有的模块并不是一个坏主意,而且是常用的方法。
使用cPickle
. 比 快几个数量级pickle
。
使用cPickle
, 您可以这样做import cPickle as pickle
,从而不必更改现有代码。我自己经常使用 cPickle,并且 20+MB 的文件加载速度相当快(分层的字典/包含数千个条目的列表)。