2012-08-03 47 views
1

这真的令人沮丧:我只是在csv文件中长时间计算后存储了一些包含列表的数据行。 我无法将csv数据返回到变量中。 其更精确的一排如Python解析列表和元组列表到csv

pete; [1,2,3,4,5]。 [(1,2),(3,4),(5,6),...]

当然,Python的CSV解析到的字符串:/, 因此,如果我尝试列表()这就像:

list("[(1,2),(3,4)]") = ['[','(','1',',',...] 

你有什么想法来应付这个吗?

以为我可以使用:

的名字,名单中,csvfile lTuples:

...

非常感谢!

+2

咦?对不起,我不明白这个问题。请编辑澄清。 – 2012-08-03 00:45:33

+0

如果您刚刚使用逗号(例如:'','。join(stuff)')将值连接在一起,那么当您保存csv文件时,这些字符串将不会被正确引用,并且需要使用一些创意解析来反转此编码。 – 2012-08-03 00:49:38

+0

IIUC你会想要'ast.literal_eval',但@AdamWagner指出的引用问题会有点麻烦。 – DSM 2012-08-03 00:50:56

回答

5

您可以使用ast.literal_eval(只要字符串只包含字符串,数字,元组,列表,字典,布尔值和无)。

>>> import ast 
>>> ast.literal_eval("[(1,2),(3,4)]") 
[(1, 2), (3, 4)] 
+1

'ast.literal_eval'和内置的'eval'有什么区别? – satoru 2012-08-03 00:53:10

+1

'ast.literal_eval'是安全的。如果字符串中包含恶意代码 – 2012-08-03 00:55:33

+0

,那么使用字符串中的内置'eval'可能会非常危险,这对我很有用!答案,快如闪电:) – 2012-08-03 00:56:14