Перевод текста из объекта файла в текст
имею такую прогу
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, так лучше не делать - итерация может сломаться. Ну, разве что если вы хотите так пропустить первую строку файла, но и тогда лучше это по-другому делать, в явном виде как-то.