-1

说,我有一个 python 列表:

arr = [
  [1,2,3,4],
  [11,22,33,44]
]

我想将此对象转储到带有代码的文件中,以便我可以eval()尽快将其返回,文件的内容应该是:

[
  [1,2,3,4],
  [11,22,33,44]
]

我不想使用pickle,因为它太慢了。

4

4 回答 4

3

print repr(arr).

当然,泡菜并不是特别慢。而且,正如 zhangyangyu 所指出的,虽然这适用于列表,但它不适用于repr无法eval'd 的对象。

于 2013-07-18T12:39:10.427 回答
3

我认为您可以使用repr, 然后将结果写入文件。

代表(...)

代表(对象)-> 字符串

返回对象的规范字符串表示。

对于大多数对象类型,eval(repr(object)) == object。

但这并不安全,如果文件被更改,可能会发生可怕的事情。

更重要的是,您文件中的列表似乎是格式。当这种情况发生时,您如何将其转换回来。当您读回内容时,您必须添加逻辑以查看字符串是否表示列表结束。如果他们在一条线上,可能会更容易。

所以,使用一些现有的模块并不是一个坏主意,而且是常用的方法。

于 2013-07-18T12:39:37.707 回答
2

使用cPickle. 比 快几个数量级pickle

于 2013-07-18T12:45:27.290 回答
1

使用cPickle, 您可以这样做import cPickle as pickle,从而不必更改现有代码。我自己经常使用 cPickle,并且 20+MB 的文件加载速度相当快(分层的字典/包含数千个条目的列表)。

于 2013-07-18T12:55:48.827 回答