python 解析配置檔案

2021-06-21 15:46:47 字數 3296 閱讀 4578

#!/usr/bin/env python

#coding=utf-8

#上面來顯示中文的。不然中文會出問題

'''說明:輸入的檔案,#開頭的一行預設是注釋符號,這一行不計入處理,其餘的都是有效行,有效行遇到#也結束

'''#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:

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:

print name

6、記住,裡面的變數啊,都是引用。所以,你將start = end,然後修改了end,start也跟著修改了。所以我上面的偏移都是用j來記錄,然後加減的。

使用 Python 解析配置檔案

第一步是選擇配置檔案的格式 ini json yaml 或 toml。有時,程式需要足夠的引數,將它們全部作為命令列引數或環境變數既不讓人愉快也不可行。在這些情況下,你將需要使用配置檔案。有幾種流行的配置檔案格式。其中包括古老的 雖然有時定義不明確 ini 格式,雖然流行但有時難以手寫的 json ...

配置檔案解析函式

config.h this file is usred for parsing configure file.e mail yhniejun 163.com 2007.01.25 mr.nie the struct of config file.struct conf info typedef st...

tinyxml解析配置檔案

一 tinyxml類簡單介紹 tinyxml實現的時dom訪問模型,因此提供了一系列的類對應xml檔案中的各個節點。主要類間的關係如下圖所示 tixmlbase 其他類的基類,是個抽象類 tixmldocument 表示整個xml文件,不對應其中某個特定的節點。tixmlelement 表示元素節點...