Новые строки фактически удаляются с помощью splitlines()
, поскольку вы не предоставляете аргумент keepends
. Но вместо fin.read().splitlines(keepends=True)
вы можете просто fin.readlines()
.
Следующая часть проблемы заключается в том, что вы записываете строки в файл, когда проверяете их на запятые, поэтому к тому времени, когда вы увидите запятую, которую вы ищете, уже слишком поздно менять предыдущую линий. Вместо этого сначала измените все строки, а затем запишите все в файл.
Наконец, я отмечу, что lines[i - 1].strip('\n')
на самом деле не изменяет lines[i - 1]
. Он просто возвращает модифицированную версию строки, но вам все равно нужно вернуть ее обратно.
Решение этих проблем в вашем коде, похоже, делает то, что вы просите:
with open(in_file9, 'r', encoding='utf-8') as fin, open(out_file10, 'w', encoding='utf-8') as fout:
lines = fin.readlines()
for i, line in enumerate(lines):
if line.startswith(','):
lines[i - 1] = lines[i - 1].strip('\n')
lines[i - 2] = lines[i - 2].strip('\n')
lines[i - 3] = lines[i - 3].strip('\n')
fout.write(''.join(lines))
С учетом всего сказанного, если ваша проблема может быть обобщена на "если строка начинается с запятой, подключите ее к последней непустой строке", вот гораздо более короткое и гибкое решение с использованием регулярных выражений:
from re import sub, MULTILINE
with open(in_file9, 'r', encoding='utf-8') as fin, open(out_file10, 'w', encoding='utf-8') as fout:
lines = fin.read()
lines = sub(r'\s+^(?=,)', '', lines, flags=MULTILINE)
fout.write(lines)