Читать в кортеже списков из текстового файла как кортеж, а не 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 в текстовые файлы, а затем чтения их обратно.