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。這樣便可以注入屬性,進行相關預設值的設定...