Как избавиться от преобразования экранирования в файле при методе read?

Есть файл .txt, в котором содержится строка с экранированием \n. При чтении этого файла в питоне при помощи read() этот символ преобразуется, как при использовании s.encode('unicode_escape') (т.е. \n становиться \\\\n, и при декодировании получается \\n). Мне нужен способ предотвратить или обернуть это превращение.

with open('../quotes/to_add.txt', 'r', encoding="UTF-8") as q:
    q = q.read().splitlines()

Пример файла:

Ну вот идут буковки буковки и тут хоп:\n- Начался диалог\n- Закончился

Мне же нужно вывести на экран после прочтения:

Ну вот идут буковки буковки и тут хоп:
- Начался диалог
- Закончился

Ответы (1 шт):

Автор решения: Roman Konoval

Тут есть недопонимание с вашей стороны. В файле нет символа \n, т.е нет байта с кодом 10. Есть два байта один для символа \ и второй для n:

00000000: 6162 635c 6e64 6566 0a                   abc\ndef.
                 ^   ^
                 |   |
                 \   n

Настоящий перевод строки выглядит так:

00000000: 6162 630a 6465 660a                      abc.def.
                 ^      

Когда вы файл читаете, то в строке у вас будет два символа. То что вы хотите трактовать их как один, только вы знаете, это уже ваша интерпретация строки. Если вы хотите, чтобы эта последовательность обозначала один символ перевод строки - нужно такую замену сделать самому, как указал insolor:

    for i in q:
        print(i.replace(r'\n', '\n'))
→ Ссылка