我的,呵呵,别笑话。 ini文件的格式参照了这里 http://en./wiki/Ini_file 也参考了Python的ConfigParser模块的文档
IniFileParser.py
代码: |
#!C:\Python24\python.exe
import re import string
NoSectionException = ‘NoSectionException‘ NoKeyException = ‘NoKeyException‘
class IniFileParser: ‘‘‘parse ini file described in http://en./wiki/Ini_file. no functions for write, only read. :)‘‘‘ def __init__(self): self.section_obj = dict()
def load(self, filename): f = open(filename, ‘r‘) while 1: line = f.readline() if not line: break line = line.strip(‘\n‘) line = line.strip() # skip comments if line == "" or line.startswith(‘;‘) or line.startswith(‘#‘): continue match_section = re.compile(r‘^\[([\w\s\.]*)\]$‘).match(line) if match_section: # section name line line = match_section.group(1) # get section name sec_keys = dict() self.section_obj[line] = sec_keys else: # key=value line re_comment = re.compile(r‘[;#].*‘) line = re_comment.sub(‘‘, line) # remove comments in line [key, value] = map(string.strip, line.split(‘=‘, 1)) sec_keys[key] = value f.close()
def sections(self): result = self.section_obj.keys() result.sort() return result
def has_section(self, section): return section in self.section_obj.keys()
def keys(self, section): if not self.has_section(section): raise NoSectionException result = self.section_obj[section].keys() result.sort() return result
def has_key(self, section, key): return self.section_obj[section].has_key(key)
def get_value(self, section, key): if not self.has_section(section): raise NoSectionException if not self.has_key(section, key): raise NoKeyException return self.section_obj[section][key]
|
Unit Test: TestIniFileParser.py
代码: |
#!C:\Python24\python.exe
import unittest from IniFileParser import *
class TestIniFileParser(unittest.TestCase): def setUp(self): self.ini = IniFileParser() self.ini.load(‘test.ini‘)
def testsections(self): self.assertEqual(self.ini.sections(), [‘section1‘, ‘section2‘])
def testhassections(self): self.assertTrue(self.ini.has_section(‘section1‘)) self.assertTrue(self.ini.has_section(‘section2‘)) self.assertFalse(self.ini.has_section(‘section3‘))
def testkeys(self): self.assertEqual(self.ini.keys(‘section1‘), [‘var1‘, ‘var2‘]) self.assertEqual(self.ini.keys(‘section2‘), [‘var1‘, ‘var2‘]) self.assertRaises(NoSectionException, self.ini.keys, ‘section3‘)
def testhaskey(self): self.assertTrue(self.ini.has_key(‘section1‘, ‘var1‘)) self.assertTrue(self.ini.has_key(‘section1‘, ‘var2‘)) self.assertTrue(self.ini.has_key(‘section2‘, ‘var1‘)) self.assertTrue(self.ini.has_key(‘section2‘, ‘var2‘))
def testgetvalue(self): self.assertEqual(self.ini.get_value(‘section1‘, ‘var1‘), ‘foo‘) self.assertEqual(self.ini.get_value(‘section1‘, ‘var2‘), ‘doodle‘) self.assertEqual(self.ini.get_value(‘section2‘, ‘var1‘), ‘baz‘) self.assertEqual(self.ini.get_value(‘section2‘, ‘var2‘), ‘shoodle‘) self.assertRaises(NoSectionException, self.ini.get_value, ‘section3‘, ‘var1‘) self.assertRaises(NoKeyException, self.ini.get_value, ‘section1‘, ‘var3‘)
if __name__ == ‘__main__‘: #unittest.main() suite = unittest.makeSuite(TestIniFileParser) unittest.TextTestRunner(verbosity=2).run(suite)
|
ini file for test: test.ini
引用: |
[section1]
; some comment on section1 var1 = foo var2 = doodle ; some comment on section1.var2
[section2]
# some comment on section2 var1 = baz # some comment on section2.var1 var2 = shoodle
# [section3] # var1 = bar ; var2 =
|
_________________ I like Gentoo Linux!
|