Преобразование строк в кортеж или список

Проблема следующая:

Есть текстовый файл, со строками вида:

(10, 13, 15)
(22, 44, 66)
(45, 77, 11)
(24, 70, 88)
(88, 75, 99)
(11, 24, 55, 66)

Мне нужно его спарсить, сохранив целостность, и перевести из строки в кортеж.

Пробовал сделать через ast

import ast

f = open('test.txt', 'r', encoding='utf-8') # открываем файл со всеми форматами

for line in f: # записываем все форматы в список
   a = f.readline()
   items = ast.literal_eval(a)
   print(items)

Работает, но видит строки через одну, то есть 2, 4, 6, 8 ... итд

Пробовал через json, переведя данные файла в формат списка:

[22, 44, 66]
[45, 77, 11]
[24, 70, 88]
[88, 75, 99]
[11, 24, 55, 66]
import json

f = open('test.txt', 'r', encoding='utf-8') # открываем файл со всеми форматами

for line in f: # записываем все форматы в список
     a = f.readline()
     arr = json.loads(a)
     print(type(arr), arr)

Ситуация как и в случае с ast.

Как можно это решить?

Спасибо.


Ответы (4 шт):

Автор решения: icYFTL

В таком виде?

print([eval(x) for x in open('test.txt', 'r', encoding='utf-8').read().split('\n')])
→ Ссылка
Автор решения: ladmol

Попробуйте так:

with open('test.txt', 'r') as f:
    nums = f.read()
file_tuple = open('res.txt', 'w')
file_tuple.write(nums)
file_tuple.close()

test.txt - файл со строчками, а res.txt - файл с результатом

→ Ссылка
Автор решения: Edward Grachev

Достаем регулярками числа из строки

import re
lst = []
with open('1.txt', 'r', encoding='utf-8') as file:
     for line in file.readlines():
        res = re.findall(r'\d+', line)
        lst.append(res)
print(lst)
→ Ссылка
Автор решения: CrazyElf
for line in f:
   a = f.readline()
   items = ast.literal_eval(a)

Вы тут фактически читаете сразу две строки из файла - одну с помощью цикла for, а другую "вручную" с помощью readline(). При этом каждую нечётную строку, которую вы прочитали в переменную line, вы никак не используете. Читайте файл каким-то одним способом. И используйте контекстный менеджер with чтобы не забывать закрыть файл. Сейчас вы забываете закрыть открытый файл, это не очень хорошо. Итого, ваш код должен быть примерно такой:

import ast

with open('test.txt', 'r', encoding='utf-8') as f:
    for line in f:
        items = ast.literal_eval(line)
        print(items)

И в коде с использованием json у вас та же самая ошибка.

→ Ссылка