Python '\ n' не работает при записи в текстовый файл на Amazon Linux - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть скрипт Python, который записывает в файл журнала txt, используя следующий код:

with open('folder/log_{}.txt'.format(today), "a") as text_file:
    text_file.write(text_to_write)

Обычно text_to_write представляет собой строку, которая включает в себя '\ n', чтобы начать новую строку.

Отлично работает при локальном запуске скрипта на моей машине с Windows.Однако, когда он запускается на экземпляре Amazon Linux, он игнорирует '\ n', и все text_to_write находятся в одной строке.'\ N' также не записывается в журнал, просто игнорируется, как если бы его там не было.

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

Большое спасибо

1 Ответ

0 голосов
/ 25 сентября 2018

Это действительно странно.

Но в любом случае, поскольку вы хотите написать текстовый файл, вы должны указать кодировку символов:

text_to_write = "hello\n"
with open(path, mode="a", encoding="utf-8") as text_file:
    text_file.write(text_to_write)

Но вы также можете использовать регистратор.В вашей основной функции вы можете инициализировать конфигурацию регистрации.Например, вы можете использовать базовую конфигурацию:

import logging

logging.basicConfig(level=logging.INFO,
                    filename=path)

Конечно, эту конфигурацию можно прочитать из файла INI.

Затем в каждом модуле вы можете определить регистратор и использоватьэто так:

LOG = logging.getLogger(__name__)

LOG.info("hello")

Результат примерно такой:

INFO:module_name:hello

Редактировать

Разъяснение о новых строках

Для текстового потока Python использует концепцию универсальной новой строки :

универсальной новой строки Способ интерпретации текстовых потоков, в которомвсе следующее распознается как завершающая строка: соглашение о конце строки Unix '\ n', соглашение Windows \ r \ n 'и старое соглашение Macintosh' \ r '.

Если вы хотите записать текстовые файлы, специфичные для Windows, в системе Linux, вам нужно установить перевод строки на '\ r \ n', это можно сделать так:

with open(path, mode="a", encoding="utf-8", newline="\r\n") as text_file:
    text_file.write(text_to_write)

Но обычно это плохая практика ... вы поймете, почему ниже ...

Блокнот

Блокнот Microsoft не очень умен: он не может правильно обрабатывать текстовые файлы Unix, потому что он не 't распознает '\ n' как новую строку, поэтому каждая строка объединяется и выглядит как одна строка текста.

Я рекомендую вам установить знаменитый Notepad ++ , который является интеллектуальным инструментоми может автоматически определять стиль новой строки при открытии файла.Вы также можете использовать его, чтобы изменить его.

Поэтому я советую использовать universal newline и установить хороший инструмент, такой как Notepad ++ или Sublime Text и т. Д.

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