python讀取和自定義配置檔案的教程

2021-06-14 06:39:05 字數 3085 閱讀 1686

python讀取和自定義配置檔案的方法。

#! /usr/bin/python

#-*- coding: utf-8 -*-

import configparser

config = configparser.configparser()

config.readfp(open(raw_input("input file name : "),"rb"))

print config.get("global","ip")

執行結果:

>>>

input file name : 0.ini

192.168.1.100

如果把最後一行換成:print config.get("global","mac")

執行結果:

>>>

input file name : 0.ini

0x414243444546;mac

然而讀取的資料不是我預期的(主要是ini檔案寫法有誤),再看下面這個自定義的配置檔案:

1.ini檔案:

---檔案開始----

# 配置檔案

[global] #全域性配置引數

ip = 192.168.1.100

port = 1234

mac = 0x414243444546# mac位址

[global] #全域性配置引數

ip = 192.168.1.101

port = 1234

mac = 0x414243444547 # mac位址

---檔案結束----

對於擴充套件的配置檔案格式,上述**不能解析。預設的配置有時候侷限太大,用起來不太方便。

我們可以借助python的dict資料結構完成配置檔案的解析,使用起來也很方便。

下面是個示例,可以讀取上述擴充套件的配置檔案。

下面給出本python 教程的讀取配置檔案的**示例:

#! /usr/bin/python

#-*- coding: utf-8 -*-

partlable = ("<",">")

sectionlable = ("[","]")

endlinelable = "\r\n" # windows下的行標誌

#endlinelable = "\n" # linux下的行標誌

equallable = "=" # 賦值標誌

notelable = '#' # 注釋標誌

# 得到總配置的map

def getplatformmap(strtmp,lable1 = partlable,lable2 = sectionlable):

tmp = strtmp.split(lable1[0])

tmp = [elem for elem in tmp if len(elem) > 1]

tmp = [elem for elem in tmp if elem.rfind(lable1[1]) > 0]

platdict = {}

for elem in tmp:

key = elem[0:elem.find(lable1[1]):]

value = elem[elem.find(lable2[0])::]

platdict[key] = value

return platdict

# 得到各部分的map

def getsectionmap(strtmp,lable1 = sectionlable):

tmp = strtmp.split(lable1[0])

tmp = [elem for elem in tmp if len(elem) > 1]

tmp = [elem for elem in tmp if elem.rfind(lable1[1]) > 0]

sectiondict = {}

for elem in tmp:

key = elem[0:elem.find(lable1[1]):]

value = elem[elem.find(endlinelable)+len(endlinelable)::]

sectiondict[key] = value

return sectiondict

# 獲取具體配置值

def getvaluemap(strtmp):

tmp = strtmp.split(endlinelable)

tmp = [elem for elem in tmp if len(elem) > 1]

valuedict = {}

for elem in tmp:

if elem.find(notelable) > 0: # 如果有注釋則去掉注釋

elem = elem[0:elem.find(notelable):]

elem = ''.join(elem.split()) # 去掉空白字元

key = elem[0:elem.find(equallable):]

value = elem[elem.find(equallable)+len(equallable)::]

valuedict[key] = value

return valuedict

f = open(raw_input("input file name : "),"rb")

strfilecontent = f.read()

f.close()

vardict = {}

var1 = getplatformmap(strfilecontent)

for k,v in var1.items():

var2 = getsectionmap(v)

dict3 = {}

for k2,v2 in var2.items():

var3 = getvaluemap(v2)

dict3[k2] = var3

vardict[k] = dict3

print vardict["part2"]["global"]["ip"]

以上只是提供一種思路,並驗證其可行性,具體實施可以借助c++等其它語言改寫以滿足需求。

create react app 自定義配置檔案

在工程中執行npm run eject刪除node modules資料夾的內容 重新安裝依賴,執行npm install 修改工程名 config webpack.config.js檔案 components 代表的是 工程名 src components 目錄 pages 代表的是 工程名 src...

Springboot2 x 讀取自定義配置檔案

一 通過 propertysource載入自定義配置檔案 1 在springboot專案resources資料夾下新建student.properties student.number 1001 student.name 張三 student.classes 計算機新建student類 compon...

SpringBoot自定義屬性配置讀取

springboot讀取配置檔案,將配置檔案內容注入到entity或者配置欄位中。2.定義乙個entity,給出set,get方法。加上註解 component configurationproperties prefix girl 可看見註解來自於boot。這樣便可以注入屬性,進行相關預設值的設定...