Первая строка файла отсутствует при чтении - PullRequest
0 голосов
/ 10 апреля 2020

Отсутствует первая строка при чтении из файла и переносе строк в новый, интересно, почему. Я нашел решение, добавив x = flower1.readline() y = flower2.readline() и напечатав их в файле, но все еще не понимал, почему в первой версии моего кода отсутствуют первые строки:

flower1 = open('/Users/berketurer/Desktop/week5_flower1.txt','r')
flower2 = open('/Users/berketurer/Desktop/week5_flower2.txt', 'r')
newFile = open('/Users/berketurer/Desktop/FlowerCombined.txt','w')

for line in flower1:
    lines = flower1.read()
    newFile.write(lines)

newFile.write('\n')

for line in flower2:
    lines = flower2.read()
    newFile.write(lines)

flower1.close()
flower2.close()
newFile.close()

1 Ответ

2 голосов
/ 10 апреля 2020

что l oop не имеет смысла:

for line in flower1:
    lines = flower1.read()
    newFile.write(lines)

это повторяет строки файла, а внутри l oop вы читаете весь файл!

Тот факт, что первая строка отсутствует, объясняется тем, что python уже использовал строку в первой итерации for line in flower1. Затем он читает остальную часть файла и записывает его, и l oop заканчивается, потому что достигнут конец файла ... Обратите внимание, что line никогда не используется в коде. Обычно это плохой знак.

просто удалите l oop:

lines = flower1.read()
newFile.write(lines)

Если вы хотите обрабатывать построчно по какой-то причине (может пригодиться, если вы хотите отфильтровать в некоторых строках) оставьте l oop, но не читайте в l oop:

for line in flower1:
    newFile.write(line)

Также есть одна строка: newFile.writelines(flower1) если вы не фильтрация не нужна.

Хотя есть и лучшие способы объединить общие файлы (двоичные или текстовые). Мне нравится версия, в которой используется shutil.copyfileobj, потому что, даже если файлы огромны, объем памяти будет умеренным, а с точки зрения производительности, поскольку размер блока больше 1 строки, скорость может быть немного лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...