Запись текста из одного .txt в другой .txt Python 3

Всем привет!

Имеется три .txt файла с различным количеством строк текста в каждом.

Сравниваем количество строк в каждом файле и в новый файл, уже четвертый .txt, переносим текст, у которого меньше всего строк.

Проблема возникает при записи всего текста в новый файл.

Вот код:

with open ('1.txt', encoding='utf-8') as f:
    line_count1 = 0
    for line in f:
        line_count1 += 1
    print(line_count1)

with open('2.txt', encoding='utf-8') as f1:
    line_count2 = 0
    for line in f1:
        line_count2 += 1
    print(line_count2)

with open('3.txt', encoding='utf-8') as f2:
    line_count3 = 0
    for line in f2:
        line_count3 += 1
    print(line_count3)

with open('all123.txt', 'w', encoding='utf-8') as f3:
if (line_count2 < line_count1) and (line_count2 < line_count3):
    f3.writelines(f1)

В чем может быть проблема в записи файла?

Единственное, что получается, это, когда я копирую текст из файла и вставляю его просто в write() все конечно уходит.

Я только учусь.


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

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

Из f1 вам предварительно надо прочитать строки в список, поскольку из дескриптора вы можете прочитать данные только один раз:

with open(...) as f1: 
    f1_lines = [l for l in f1.readlines()]
    line_count2 = len(f1_lines)
...
if (line_count2 < line_count1) and (line_count2 < line_count3):
    f3.writelines(f1_lines)

Аналогично поступаем и с другими f-дескрипторами файлов :)

Ещё в конце каждой строки должен быть символ новой строки:

f3.writelines([f'{l}\n' for l in f1_lines])
→ Ссылка
Автор решения: Danis

после того как вы один раз прочитали файл for line in f: он стал пустым

вам надо заново открыть файл

with open('all123.txt', 'w', encoding='utf-8') as f3:
    if (line_count2 < line_count1) and (line_count2 < line_count3):
        with open("1.txt", encoding="utf-8") as f1:
            f3.writelines(f1.readlines())
→ Ссылка