PCS208 dict4ini
特别说明:
此条目是特邀 Dict4Ini 模块作者 Limodou 自个儿写成的
- Limodou 是中国Python 早期用户之一,长期在业余时间钻研各种 Python 技术,进一步信息可以参考他的维基和博客:
概述
为什么要开发Dict4Ini呢?因为有时需要处理ini文件。Python中的确已经存在象ConfigParser这样的模块,但是它只能处理标准的ini格式,处理的基本上都是字符串,如果要处理其它的格式要调用相应的转换函式,并不方便。在Python中使用得比较多的就是内置的list, dict之类的数据结构,许多人可能直接将这些数据写在.py文件中,以.py作为类ini文件来使用,但这样只能用在Python程序中,并且修改并不象ini文件那样方便。同时使用象ConfigParser这样的模块,不能非常方便地引用ini中的项。那么仔细观察一下一个ini文件就象是一个dict,并且看成是两层的dict。第一层就是session,第二层就是session下的项。在使用时可以理解为ini['session']['key']。因此我就想如何可以将ini映射成为dict的形式,同时可以将dict保存为ini的形式,这两者不就比较完美的统一了吗?因此我开发了Dict4Ini这个模块。它最早是我在改进confbot(一个gtalk的聊天机器人程序)上,后来慢慢发展,用在象UliPad等多个项目中。
使用
Dict4Ini允许你把ini当成一个字典来使用,它支持传统的ini格式,即每项的值就是一个字符串。同时还支持非传统的使用,就是Python数据类型,可以支持数值、list、字符串格式,同时支持unicode。因此在使用非传统格式时,它其实是把Python的数据表示写在了ini文件中,因此象字符串一般都有双引号,列表是使用','进行分隔,数值可以直接写,包括浮点数,Unicode字符串只要在字符串前面加u。 Dict4Ini除了支持简单的Python数据类型存储,还可以:
- 对关键信息进行加密;
- 可以读取简单的注释,并且在保存时注释不会丢失;
- 它可以记忆配置项的顺序,当写回文件时顺序不会乱;
- 可以实现分层的保存;
特别是在使用时,你就把它当成一个dict就可以,如:
x = dict4ini.DictIni('t.ini')
print x[“default”][“path”]
上面的代码将打开一个t.ini文件,同时将default节下的path项打印出来,那么这个t.ini的格式可以为:
[default] path = "path"
dict4ini不仅可以象字典一样操作,还可以象属性一样操作,前提是你的项的key应该符合一个标识符的定义,如上例可以改为:
print x.default.path
这样会更方便。并且如果你想创建一个新的项时,直接赋值即可。如:
x.default.newvalue = 'value' x.save()
这样就自动创建了一个新的项,然后调用save()方法就可以保存起来了。
小结
Dict4Ini的项目主页在 http://code.google.com/p/dict4ini/ , 上面有许多示例可以进行参考。另外还有一些注意事项:
- 如果你想要保存Python数据类型时,需要注意它的格式可能根据数据格式的不同会进行变化。如list会是以','分隔的串,如果字符串中有特殊符号,它将使用双引号进行处理。
- 布尔类型需要处理为1或0。
练习
1. 使用dict4ini创建一个新的ini文件,并创建如下内容:
[default] path = "hello,world" name = name [session] file = testfile
2. 使用dict4ini创建一个新的ini文件,并创建如下内容:
[default] 123 = "has spaces" list = list,1,"hello, world",