2015-10-26 75 views
2

我的txt文件看起來是這樣的:的Python閱讀txt文件到號碼清單列表

[[1,3,5],[1,4,4]] 
[[1,4,7],[1,4,8],[2,4,5]] 

我試圖把它轉換成一個列表,其中包括在TXT文件中的所有列表。因此,對於我的例子中所需要的輸出將是:

[[[1,3,5],[1,4,4]], [[1,4,7],[1,4,8],[2,4,5]]] 

這似乎是一件容易的事,但我只能得到這樣的:

['[[1,3,5],[1,4,4]]', '[[1,4,7],[1,4,8],[2,4,5]]'] 

有沒有一種簡單的方法將字符串類型轉換成一個列表?


的代碼我使用:

input_list = [] 
with open("./the_file.txt", 'r') as f: 
    lines = f.read().split('\n') 
    for each_line in lines: 
     input_list.append(each_line) 

f.close() 
+0

'開放的( 「./ the_file.txt」,「R ')as f:answer = [ast.literal_eval(line.strip())for line in f]' – inspectorG4dget

+0

您是否希望列表項被表示爲整數或字符串? –

+0

@JohnGordon整數。對不起,我沒有說清楚。謝謝。 – datadatadata

回答

2

你真的想評估你的文件中的每一行爲實際的Python代碼。但是,這樣做可能會產生問題(例如:如果一行說import os; os.system('rm -rf /')會發生什麼情況)。

So you don't want to use something like eval

相反,你可能會考慮使用ast.literal_eval,其中有對這種行爲的幾個保障:

with open("./the_file.txt", 'r') as f: 
    answer = [ast.literal_eval(line.strip()) for line in f] 
1

這可以在一個行完成與ast.literal_eval和列表理解:

from ast import literal_eval 

input_list = [literal_eval(line) for line in open("./the_file.txt", 'r') ] 
+0

你用'ast.literal_eval'更安全,它可以防止你意外地炸燬你的電腦,例如 – inspectorG4dget

+0

謝謝,修改我的代碼。 –

0

如果您在文本文件中的行是格式正確,你可以使用eval

input_list.append(eval(each_line))