2012-08-03 92 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