Проблема при парсинге файла

293 просмотра
0
0 Комментариев

Использую Python 2.6.1 на ОС Linux Ubuntu. Выполнял считывание данных из файла, и потом создавал словарик. Раньше все было ок. На данный момент решил использовать тот же скрипт для считывания. Вот его функция — парсер данных из файла:

f_conf = open(module_path() + 'config.ini', 'r')
d_conf = {}
invalid_lines = "\n"
for line in f_conf.readlines():
    try:
        if line == '\n':
            continue
        d_conf[line.split('=')[0].replace(' ','')] = line.split('=')[1].replace(' ', '').replace('\n', '')
    except:
        invalid_lines += line.rstrip('\n') + '\n'

При этом я убираю пробелы и символы перевода строки. Раньше, в частности на Windows, все хорошо работало, а на Linux перестал отлавливать символ перевода строки ‘\n’. Долго искал, а как оказалось, проблема элементарна: код перевода строки, как известно, равен 13, а код ord('\n') = 10. Проблема в принципе решена, но остается вопрос, как тогда раньше работал скрипт, и как возможно еще перехватить или заменить символ перевода, кроме варианта .replace(chr(13), '') ?


Добавить комментарий

2 Answers

Python Опубликовано 16.12.2018
0

Посмотрел, очумел, офигел и вот … идите вот смотрите: ConfigParser

То что доктор прописал от страшной болезни изобретателя велосипедов? 😉
И еще, загоните вот это в интерпретатор:

  >> "  asdfg  ".strip()

Добавить комментарий
0

код перевода строки, как известно, равен 13

Вы заблуждаетесь. Код 13 имеет символ \r (carriage return, CR), а код 10 имеет символ \n (line feed, LF). Перевод строки-же зависит от платформы. Для *nix — это символ \n, а для Windows — это последовательность символов \r\n.

но остается вопрос, как тогда раньше работал скрипт

Вероятно, раньше вы редактировали этот файл в *nix и символ перевода строки в файле был \n, а затем вы отредактировали его в Windows и, соответственно, к символу \n добавился \r

и как возможно еще перехватить или заменить символ перевода

В питоне есть специальный режим чтения файла ‘U’, при котором все платформозависимые символы перевода строк транслируются в \n

И как правильно вам уже ответили выше, для парсинга конфига уже существует готовое решение в виде класса ConfigParser

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up