1

假设我有一个由以下列表理解生成的元组列表:

foo = [(x**2, x*2) for x in xrange(10)]

如果我再写

print foo

我得到如下所示的输出:

[(0, 0), (1, 2), (4, 4), (9, 6), (16, 8), (25, 10), (36, 12), (49, 14), (64, 16), (81, 18)]

假设我之前已将此输出写入一个文件foo.txt,并想再次将此输出作为元组列表读回 Python。请注意,这是一个玩具示例,因为我显然可以重写列表推导,但在我的实际用例中,我进行了一些昂贵的计算来生成元组的原始列表,我宁愿不重复计算。

有没有办法在不使用正则表达式或其他标准字符串解析方法手动解析的情况下做到这一点?

4

2 回答 2

7

您正在寻找ast.literal_eval()

import ast
with open('foo.txt', 'r') as myfile:
    fileoutput = myfile.read() # Assuming the whole file is just the list

original = ast.literal_eval(fileoutput)
for i in original:
    print i

印刷:

(0, 0)
(1, 2)
(4, 4)
(9, 6)
(16, 8)
(25, 10)
(36, 12)
(49, 14)
(64, 16)
(81, 18)
于 2013-06-09T05:37:46.010 回答
7

你可以使用泡菜

要保存到文件,请执行以下操作:

with open('dump.txt','w') as f:
    pickle.dump(object,f)

并将对象加载回来:

with open('dump.txt') as f:
    object = pickle.load(f)

如果您只做简单的对象,海德罗的回答很好,但对于更复杂的对象,您应该使用泡菜。

于 2013-06-09T05:42:02.840 回答