Python — Переведите файл и сохраните исходный интервал между абзацами

#python #for-loop #readlines #writefile

Вопрос:

У меня есть проект, над которым я работаю, но мне нужна помощь. Моя главная цель-сделать так, чтобы переведенный текстовый файл выглядел так же, как и исходный файл, за исключением переведенных слов.

Вот как выглядит фрагмент исходного файла:

Исходный Текстовый Файл

Вот мой код на python:

 # Step 1: Import the english.txt file

import json

english_text = open('/home/jovyan/english_to_lolspeak_fellow/english.txt', 'r')

text = english_text.readlines()

english_text.close()
 
 
# Step 2: Import the glossary (the tranzlashun.json file)

with open('/home/jovyan/english_to_lolspeak_fellow/tranzlashun.json') as translationFile:
    data = json.load(translationFile)
 
 # Step 3:Translate the English text into Lolspeak

translated_text= ''

for line in text:
    for word in line.split():
        if word in data:
            translated_text  = data[word.lower()] " "
        else:
            translated_text  = word.lower()  " "
pass
 
 # Step 4 :Save the translated text as the "lolcat.txt" file

with open('/home/jovyan/english_to_lolspeak_fellow/lolcat.txt', 'w') as lolcat_file:

    lolcat_file.write(translated_text)

lolcat_file.close()

 

И, наконец, вот как выглядит мой вывод:

Выходной Переведенный Файл

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

Ответ №1:

Вы можете сохранить пробелы, читая по одной строке за раз.

 with open('lolcat.txt', 'w') as fw, open('english.txt') as fp:
    for line in fp:
        for word in line.split():
            line = line.replace(word, data.get(word.lower(), word))
        fw.write(line)
 

Ответ №2:

Я бы предложил объединить шаги 3 и 4, чтобы перевести каждую строку и написать строку, а затем n, чтобы начать следующую строку.

Я не проверял следующее в компиляторе, поэтому вам, возможно, придется изменить его, чтобы заставить его работать.

Примечание.Я изменил » w » на «a», поэтому он добавляется, а не просто записывается, и использование afaik » с » означает, что файл закроется, поэтому вам не нужно явно закрывать ().

 for line in text:
    translated_line = ""
    for word in line.split():
        if word in data:
            translated_line  = data[word.lower()] " "
        else:
            translated_line  = word.lower()  " "
    with open('/home/jovyan/english_to_lolspeak_fellow/lolcat.txt', 'a') as lolcat_file:
        lolcat_file.write(translated_line)
        write("n")