Как реализовать escape-последовательность в файле конфигурации.ini?

Buddy

Новичок
Пользователь
Июн 23, 2023
2
1
3

Есть скрипт .py, который получив запрос от пользователя Т-бота, обработав его в OWM и сформировав текстовое сообщение из разных блоков отправляет обратно в Т-бота для пользователя.

Теперь о проблеме.

Часть текстовой информации при помощи configparser парсится из файла .ini (некой текстовой библиотеке с набором фрагментов текста и параметр-ключ).
В текстах обозначены переносы строк при помощи escape-последовательность "\n".
В итоге в Т-бота возвращается текст без переносов строка, но с прописанным "\n".

Python:
# прочии импорты
from pyowm.commons.exceptions import NotFoundError
import configparser

config = configparser.ConfigParser()
config.read(data_bot_file)

error_message = config.get('Error_data', 'sorry')

# Класс
  # метод

        def send_echo(message):
            try:
                observation = self.get_weather_data(message.text)  # Получение данных о погоде
            except NotFoundError:
                self.send_message(message.chat.id, is_error=True)  # Обработка ошибки, если город не найден
                return
            except Exception:
                logging.exception(error_later_message)  # Логирование исключения
                self.send_message(message.chat.id, error_later_message)
                return

            answer = self.format_weather_data(observation, message.text)
            self.send_message(message.chat.id, answer)  # Отправка сообщения с информацией о погоде

# прочий код

    def send_message(self, chat_id, message=None, is_error=False):  # отправка сообщения в зависимости от того найден город или нет.
        if is_error:
            global error_message
            self.bot.send_message(chat_id, error_message)
        else:
            self.bot.send_message(chat_id, message)

# прочий код

Python:
[Error_data]
sorry = Не удается обнаружить данные для указанного города.  \nПопробуйте указать другое название.
later = Произошла ошибка при получении данных . Попробуйте позже.

Python:
# Пробовал так:
error_message = config.get('Error_data', 'sorry').encode().decode('unicode_escape')
# и так:
error_message = codecs.decode(config.get('Error_data', 'sorry'), 'unicode_escape')
# и так:
error_message = configparser.unescape(config.get('Error_data', 'sorry'))
# и вот так:
error_message = config.get('Error_data', 'sorry').encode().decode('utf-8')
# и этак:
config.read('my_file.ini', encoding='utf-8')


Приветствуются любые идеи!
Может как то по другому возможно обозначить перенос строки в файле .ini?
Или обработать уже полученный текст. или сформированный перед отправкой..
Но хотелось бы минимизировать код. В идеале если можно сделать что-то на уровне ini

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

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 661
474
83
в документации сказано, что параметр может быть многострочным, если последующие строки будут иметь отступ больше, чем первая строка
то есть вот так
Код:
[Error_data]
sorry = Не удается обнаружить данные для указанного города.
        Попробуйте указать другое название.
later = Произошла ошибка при получении данных . Попробуйте позже.

и все работает
Python:
import configparser

config = configparser.ConfigParser()
config.read("d:\\test.ini")
s = config.get("Error_data", "sorry")

print(s) # Не удается обнаружить данные для указанного города.
         # Попробуйте указать другое название.
 

Buddy

Новичок
Пользователь
Июн 23, 2023
2
1
3
Спасибо! Очень помогли. Работает ))
 
  • Мне нравится
Реакции: Student

Форум IT Специалистов