Лабораторная № 2, Парсер ini файлов.

Apr 27, 2010 17:06

Last script version (2010-05-21 12:51):

# -*- coding: cp1251 -*-
import re
regexStart = re.compile('\[\[')
regexEnd = re.compile('\]\]')
regexSection = re.compile(r''' *\b[a-zA-Z_]+\b *''')

dictConf={}
sectionBit = False
try :
    for line in open('file.ini','r'):
        stripLine = line.strip()
        if  regexStart.search(stripLine) and regexEnd.search( ( Read more... )

python

Leave a comment

Comments 6

anonymous May 17 2010, 11:14:59 UTC
Лёха, твой парсер, как и мой, работает некорректно. Проверь работу для файла:

[[config]]
controlPort=8900
idleTimeout=20
[[admin]]
login=petrovich
email=petrovich@zavod.ru
password=secret
[ [1 config// ]aaa
controlPort=11111
idleTimeout=000000
[[555admin]]
login=petrovich
email=petrovich@zavod.ru=12345678
password=secret

Лёня

Reply

santorio May 17 2010, 11:34:18 UTC
Мне Архимандритов сказал, что я не выдаю никаких предупреждений если обнаружена ошибка в ini файле.
Да, есть косяк с
[ [1 config// ]aaa
controlPort=11111
idleTimeout=000000
все запихал в раздел [[admin]]

Reply

santorio May 17 2010, 12:06:33 UTC
Убрал цифры из регулярного выражения ->

regex = re.compile('^\[\[ *[a-zA-Z_]+ *\]\]$')

Добавил проверку на количество слагаемых, убирает проблему с неправильным именем [[имя_секции]], но добавило проблему одиночными строками внутри секции (при разбиении по "=" длина такой строки равна 1).

elif sectionBit:
            splitLine = stripLine.split('=')
            print splitLine, len(splitLine)
            if len(splitLine) < 2 or len(splitLine) > 2:
                sectionBit = False
                # здесь добавить исключение (остановка парсера, возврат
                # неправильной строки).
            elif len(splitLine) == 2 and splitLine[0] != '':
                dictConf[indexConf][splitLine[0].strip()] = splitLine[1].strip()

Reply


anonymous May 19 2010, 09:19:04 UTC
Че то не так загрузилось ( ... )

Reply


santorio May 19 2010, 10:31:19 UTC
http://syhi.stworks.ru/ - чтобы код в нормальном формате вставлять.

Reply


santorio May 21 2010, 07:56:22 UTC

[[config]]
controlPort=8900
idleTimeout=20
[[admin]]
login=petrovich
email
email=petrovich@zavod.ru
password=secret

[[555admin]]
login=petrovich1
email=petrovich@zavod.ru=12345678
password=secret1
[ [1 config// ]aaa
controlPort=11111
idleTimeout=000000

Какова вероятность что секция [[config]] превратится в [ [1 config// ]aaa?

Reply


Leave a comment

Up