Читать в кортеже списков из текстового файла как кортеж, а не string-Python
У меня есть текстовый файл, который я хотел бы прочитать, содержащий строки кортежей. Каждый кортеж / строка в тексте имеет вид ('строка описания', [список целых чисел 1], [список целых чисел 2]). Где текстовый файл может выглядеть примерно так:
('item 1', [1,2,3,4] , [4,3,2,1])
(пункт 2', [ ] , [4,3,2,1])
(пункт 3, [1,2] , [ ])
Я хотел бы иметь возможность читать каждую строку из текстового файла, а затем поместить их непосредственно в функцию где,
function(string, list1, list2)
Я знаю, что каждая строка читается как строка, но мне нужно извлечь эту строку каким-то образом. Я пытался использовать строку.split(','), но это приводит к проблемам, когда я попадаю в списки. Есть ли способ сделать это или мне придется как-то изменить мои текстовые файлы?
У меня также есть текстовый файл списка кортежей, которые я хотел бы прочитать аналогично, в виде
[(1,2),(3,4),(5,6),...]
что может содержать любое количество записей. Я хотел бы прочитать его в списке и сделать цикл for для каждого кортежа в списке. Я полагаю, что эти двое будут использовать примерно один и тот же процесс.
3 ответов
как насчет использования eval
?
редактировать см. ответ @Ignacio с помощью ast.literal_eval
.
>>> c = eval("('item 1', [1,2,3,4] , [4,3,2,1])")
>>> c
('item 1', [1, 2, 3, 4], [4, 3, 2, 1])
Я бы только рекомендовать это, если вы на 100% уверены в содержании файла.
>>> def myFunc(myString, myList1, myList2):
... print myString, myList1, myList2
...
>>> myFunc(*eval("('item 1', [1,2,3,4] , [4,3,2,1])"))
item 1 [1, 2, 3, 4] [4, 3, 2, 1]
см. ответ @Ignacio... гораздо, гораздо безопаснее.
применение использования ast даст:
>>> import ast
>>> def myFunc(myString, myList1, myList2):
... print myString, myList1, myList2
...
>>> myFunc(*ast.literal_eval("('item 1', [1,2,3,4] , [4,3,2,1])"))
item 1 [1, 2, 3, 4] [4, 3, 2, 1]
вы ищете ast.literal_eval()
.
>>> ast.literal_eval("('item 1', [1,2,3,4] , [4,3,2,1])")
('item 1', [1, 2, 3, 4], [4, 3, 2, 1])
вы можете также посмотреть на огурец модуль для сохранения объектов python в текстовые файлы, а затем чтения их обратно.