Вам нужно будет проанализировать ваш файл как текст и извлечь информацию, используя методы обработки текста.
Вы можете использовать регулярное выражение здесь:
import re
hello_pattern = re.compile(r'Hello\(i=(\d+), time=(\d+), x=(\d+), y=(\d+)\)')
Этот шаблон соответствует представлению ваших значений namedtuple и предоставляет вам доступ к числам для каждого значения, хотя и в виде строк:
>>> line = '[Hello(i=0, time=0, x=0, y=0), Hello(i=0, time=0, x=0, y=0),...]'
>>> hello_pattern.findall(sample)
[('0', '0', '0', '0'), ('0', '0', '0', '0')]
Затем вы можете снова преобразовать эти строки в целые числа и воссоздать экземпляры;для одной строки список будет выглядеть следующим образом:
[Hello(*map(int, match)) for match in hello_pattern.findall(line)]
и демонстрация этого в той же строке:
>>> from collections import namedtuple
>>> Hello = namedtuple('Hello', 'i time x y')
>>> [Hello(*map(int, match)) for match in hello_pattern.findall(sample)]
[Hello(i=0, time=0, x=0, y=0), Hello(i=0, time=0, x=0, y=0)]
Таким образом, полное решение будет:
import re
from collections import namedtuple
Hello = namedtuple('Hello', 'i time x y') # or import your own ready definition
hello_pattern = re.compile(r'Hello\(i=(\d+), time=(\d+), x=(\d+), y=(\d+)\)')
data = []
with open('file.txt') as inputfile:
for line in inputfile:
recovered = [
Hello(*map(int, match))
for match in hello_pattern.findall(line)
]
data.append(recovered)