@Mist8

Как сохранить форматирование текста при записи в файл?

Есть небольшая программка, которая на входе должна получать несколько абзацев текста, преобразовывать его и записывать в другой файл, с сохранением форматирования (пустых строк между абзацами).

Файлы простые - .txt
В интерпретаторе при запуске программы - абзацы текста разделены строками. Но в конечном файле - нет. Не пойму в чем проблема и что сделать.
Код программы:

f = open('text.txt', 'r')
e = open('reversed_text.txt', 'w')

for line in f: 
    split = line.split()
    rev_words = []

    for i in split:
        dots = ['.', ",", '!', '?', ';', ':']
        rev_word = i[::-1]
        if rev_word[0] == '»' and rev_word[-1] == '«':
            rev_word = "«" + rev_word[1:len(rev_word)-1] + '»'
        if rev_word[-1] == rev_word[-1].upper() and rev_word[-1] not in dots:
            rev_word = rev_word[0].upper() + rev_word[1:].lower()
        if rev_word[0] in dots:
            rev_word = rev_word[1:len(rev_word)] + rev_word[0]

        rev_words.append(rev_word)

    rev_text = ' '.join(rev_words)
    print(rev_text)
    e.writelines(rev_text)
    
f.close()
e.close()
  • Вопрос задан
  • 2559 просмотров
Решения вопроса 1
Lerg
@Lerg
Defold, Corona, Lua, GameDev
rev_text = ' '.join(rev_words)
Я думаю когда получается пустой массив rev_words, rev_text тоже получается пустым и в выходной файл ничего не пишется. Можно добавить условие, что если split пуст, то копировать исходную строку, иначе - обрабатывать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@throughtheether
human after all
for line in f:
    read = f.readline()
    split = read.split()

Если я правильно понял, то строки пропускаются здесь. Вы итерируете по строкам файла (for line in f) и зачем-то каждый раз в цикле считываете новую строку (f.realine()), пропуская текущую. Python 2.7, например, в таком случае порождает исключение (ValueError: Mixing iteration and read methods would lose data).

Я бы на вашем месте исправил на:
for line in f:
    split = line.split()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы