2015-10-26 2 views
2

Моего текстового файла выглядит следующим образом:Python читать текстовый файл в список списков чисел

[[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]]] 

Похоже, простая задача, за исключением того, что я мог получить только это:

['[[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",«г ') как f: answer = [ast.literal_eval (line.strip()) для строки в 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)) 
Смежные вопросы