Перевод текста из объекта файла в текст

имею такую прогу

files_name = ['1.txt', '2.txt', '3.txt']
redacted_file = open('final.txt', 'w+', encoding='utf-8')
xxx = []

for i in range(len(files_name)):
    with open(files_name[i], encoding='utf-8') as f:
        for j in f:
            xxx.append((files_name[i], len(list(f)) + 1, f))


xxx.sort(key=lambda x: x[1])

for j in range(len(xxx)):
    redacted_file.write(str(xxx[j][0]) + '\n')
    redacted_file.write(str(xxx[j][1]) + '\n')
    redacted_file.write(str(xxx[j][2]) + '\n')

Вот что получается в final.txt

> 2.txt 1 <_io.TextIOWrapper name='2.txt' mode='r' encoding='utf-8'>
> 1.txt 8 <_io.TextIOWrapper name='1.txt' mode='r' encoding='utf-8'>
> 3.txt 9 <_io.TextIOWrapper name='3.txt' mode='r' encoding='utf-8'>

Все правильно, остается только объекты файла перевести в текст, что тут можно сделать?


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

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

Наверное, имелось в виду следующее:

for name in files_name:
    with open(name, encoding='utf-8') as f:
        text = f.read()
        xxx.append((name, len(text) + 1, text))

Вы итерируетесь по f одновременно и через for и через list уже внутри for, так лучше не делать - итерация может сломаться. Ну, разве что если вы хотите так пропустить первую строку файла, но и тогда лучше это по-другому делать, в явном виде как-то.

→ Ссылка