Лабораторная № 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(stripLine):
            indexConf = stripLine[2:len(stripLine)-2]
            if regexSection.search(indexConf):
                dictConf[indexConf.strip()]={}
                sectionBit = True
            else:
                sectionBit = False
                print 'ERROR: Wrong section name - "%s"' % (indexConf)
        elif sectionBit:
            splitLine = stripLine.split('=')
            if len(splitLine) < 2 or len(splitLine) > 2:
                print 'ERROR: Wrong line in section [[%s]] - "%s"' % (indexConf.strip(),splitLine)
                # здесь добавить исключение (остановка парсера, возврат
                # неправильной строки).
            elif len(splitLine) == 2 and splitLine[0] != '':
                dictConf[indexConf.strip()][splitLine[0].strip()] = splitLine[1].strip()
    print 'Количество секций в ini файле: %s.' % (len(dictConf))
    for keys in dictConf.keys():
        print 'В секции "%s" кол-во переменных равно %s.' % (keys, len(dictConf[keys]))
    print dictConf
except IOError:
    print 'Файл не открыт'

Old script version:

# -*- coding: cp1251 -*-
import re
regex = re.compile('^\[\[ *[a-zA-Z0-9]+ *\]\]$')
dictConf={}
sectionBit = False
try :
    for line in open('file.ini','r'):
        stripLine = line.strip()
        if  regex.search(stripLine):
            indexConf = stripLine[2:len(stripLine)-2]
            dictConf[indexConf]={}
            sectionBit = True
        elif sectionBit:
            splitLine = stripLine.split('=')
            if len(splitLine) == 2 and splitLine[0] != '':
                dictConf[indexConf][splitLine[0].strip()] = splitLine[1].strip()
    print 'Количество секций в ini файле: %s.' % (len(dictConf))
    for keys in dictConf.keys():
        print 'В секции "%s" кол-во переменных равно %s.' % (keys, len(dictConf[keys]))
    print dictConf
except IOError:
    print 'Файл не открыт'

file.ini:

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

python

Previous post Next post
Up