Преобразование строк в кортеж или список
Проблема следующая:
Есть текстовый файл, со строками вида:
(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 шт):
В таком виде?
print([eval(x) for x in open('test.txt', 'r', encoding='utf-8').read().split('\n')])
Попробуйте так:
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 - файл с результатом
Достаем регулярками числа из строки
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)
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 у вас та же самая ошибка.