python 解析配置文件
2014-04-22 21:34
399 查看
#!/usr/bin/env python #coding=utf-8 #上面来显示中文的。不然中文会出问题 ''' 说明:输入的文件,#开头的一行默认是注释符号,这一行不计入处理,其余的都是有效行,有效行遇到#也结束 作者: 最后修改时间:2014-04-22 ''' #import pdb import fileinput #pdb.set_trace() def getName(line): #找到起始位置,因为格式是name = "A",所以找第一个“ start = line.find('"') if start == -1: print 'sorry,your file maybe wrong' return #找后一个"的位置,不能直接赋值给end,然后end一个一个自加,因为都是引用,start也会跟着end变化 j = 1 while line[start+j] != '"': j = j + 1 name = line[start+1:start+j] return name def getTabName(line): #首先找到第一个',',然后回找第一个'/',中间的内容就是B.img,然后取B end = line.find(',') if end == -1: print 'sorry,your file maybe wrong' return j = 1 while line[end - j] != '/': #重新给end赋值,即使A.B.C,最后得到的将是A if(line[end - j] == '.'): new_end = end - j j = j + 1 name = line[end-j+1:new_end] return name def compare(names): for i in range(1,len(names)): if names[i] != names[0]: return False return True #打印列表 def prin(names): for name in names: print name def do_with_line(config_file): flag = 0 #名字用列表来存储,第一个是name,后面的是tag一次排序的 names = [] for line in fileinput.input(config_file): #disk 结束 if line.find(']') == 0: flag = 0 continue #处理disk下一行 if flag == 1: names.append(getTabName(line)) continue #去掉前后的空格 line = line.rstrip() #如果是#或者'''开头,直接忽略,因为是注释符号 if line[0] == '#': continue #查找name,这个必须在首位,不然认为不是name,name只有一个 if line.find('name') == 0: name = getName(line) names.insert(0,name) #找到disk标志 if line.find('disk') == 0: flag = 1 continue return names if __name__ == '__main__': config_file = 'xen1.cfg' names = do_with_line(config_file) prin(names) if compare(names) == False: print 'nonono' else: print 'yesyesyes'
以上的格式自己调试一下啦。
xen1.cfg内容如下:
#配置文件如下,要求检索主机名A,tap类型磁盘镜像名B,tap2类型磁盘镜像名C
#并且判断A,B,C是否一致
name = "ABC" #主机名A
uuid = "29a52d04-b30e-8f56-0438-3eb31bbd765f"
maxmem = 3072
memory = 3072
vcpus = 4
bootloader = "/usr/bin/pygrub"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
disk = [
"tap:aio:/home/xen/Bd.img,xvda,w", #tap类型磁盘镜像/home/xen/B.img,以tap:aio:路径,盘符,打开方式
"tap2:aio:/home/xen/CD23.raw,xvda,w", #tap2类型磁盘镜像/home/xen/C.raw,以tap2:aio:路径,盘符,打开方式
]
vif = [ "mac=00:16:36:30:1c:3e,bridge=xenbr0","mac=00:16:36:30:1c:3f,bridge=xenbr1" ]
根据配置文件,得到name,3个,然后比较3个,如果一样返回True,不一样返回False
得到的结果:
这样必须注意一些问题:
1、py代码如果含有中文,必须有#coding=utf-8 。
2、一个字符串,要取其中一段,可以用:name
= line[start+1:start+j],这样,name就是line从start+1开始到start+j的字符串赋值给name。
3、python布尔,真用的是True,假用的False,只是第一个字母为大写。
4、调试语句,import
pdb,开启调试pdb.set_trace()
5、打印一个列表,
for
name in names:
name
6、记住,里面的变量啊,都是引用。所以,你将start
= end,然后修改了end,start也跟着修改了。所以我上面的偏移都是用j来记录,然后加减的。
相关文章推荐
- python 3.x 解析 INI配置文件(ConfigParser)
- Python读写配置文件的实际操作步骤解析
- python开发_configparser_解析.ini配置文件工具_完整版_博主推荐
- python 中对配置文件的解析 ConfigParser & ConfigObj
- [zz]python模块之ConfigParser: 用python解析配置文件
- python模块之ConfigParser: 用python解析配置文件
- python模块之ConfigParser: 用python解析配置文件
- Python解析配置文件模块:ConfigPhaser
- python 解析配置文件
- Python配置文件解析模块ConfigParser使用实例
- python 解析 配置文件
- Python实现加载及解析properties配置文件的方法
- [Python]ConfigParser解析配置文件
- python解析配置文件
- python ConfigParser – 配置文件解析
- python模块之ConfigParser: 用python解析配置文件[zt]
- Python读写配置文件的实际操作步骤解析
- python解析xml配置文件
- Python 02 解析配置文件和日志库的使用
- Python 解析配置文件 (ConfigParser)模块