Здесь нужно обратить внимание на две вещи. Во-первых, вы не должны менять свой итератор line
, пока он работает через lines
. Вместо этого назначьте его новой строковой переменной (я называю это new_line
). Во-вторых, если вы добавите больше символов в конце каждого line
, он будет помещен после символа конца строки и, следовательно, будет перемещен в следующую строку, когда вы записываете его в новый файл. Вместо этого пропустите последний символ каждой строки и добавьте разрыв строки вручную.
Если я правильно вас понимаю, это должно дать вам желаемый результат:
with open('file.md', 'r') as md:
text = ""
lines = md.readlines()
for line in lines:
if line[-1] == "\n":
text += "'" + line[:-1] + "'+\n"
else:
text += "'" + line + "'+"
with open('file.txt', 'w') as txt:
txt.write(text)
Обратите внимание, как последняя строка трактуется иначе, чем другие (без eol-char и без знака +). text += ...
добавляет больше символов к существующей строке.
Это также работает и может быть немного лучше, потому что избегает оператора if. Вы можете удалить символ новой строки прямо при чтении содержимого из file.md
. В конце вы пропускаете последние два символа вашего контента, которые являются +
и \n
.
with open('file.md', 'r') as md:
text = ""
lines = [line.rstrip('\n') for line in md]
for line in lines:
text += "'" + line + "' +\n"
with open('file.txt', 'w') as txt:
txt.write(text[:-2])
... и с использованием форматера:
text += "'{}' +\n".format(line)
... проверка на пустые строки, как вы просили в комментариях:
for line in lines:
if line == '':
text += '\n'
else:
text += "'{}' +\n".format(line)