日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

configParser模块详谈

發布時間:2024/4/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 configParser模块详谈 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

  使用配置文件來靈活的配置一些參數是一件很常見的事情,配置文件的解析并不復雜,在python里更是如此,在官方發布的庫中就包含有做這件事情的庫,那就是configParser

  configParser解析的配置文件的格式比較象ini的配置文件格式,就是文件中由多個section構成,每個section下又有多個配置項

ConfigParser簡介


?

  ConfigParser 是用來讀取配置文件的包。配置文件的格式如下:中括號“[ ]”內包含的為section。section 下面為類似于key-value 的配置內容。

ConfigParser模塊在python3中修改為configparser.這個模塊定義了一個ConfigParser類,該類的作用是使用配置文件生效,配置文件的格式和windows的INI文件的格式相同

  該模塊的作用?就是使用模塊中的RawConfigParser()、ConfigParser()、?SafeConfigParser()這三個方法(三者擇其一),創建一個對象使用對象的方法對指定的配置文件做增刪改查?操作。配置文件有不同的片段組成和Linux中repo文件中的格式類似:

ini

1、ini配置文件格式如下:

#這是注釋
;這里也是注釋[section0]key0 = value0 key1 = value1[section1]key2 = value2 key3 = value3

  樣例配置文件example.ini

[db] db_host = 127.0.0.1 db_port = 69 db_user = root db_pass = root host_port = 69[concurrent] thread = 10 processor = 20

  

2、section不能重復,里面數據通過section去查找,每個seletion下可以有多個key和vlaue的鍵值對,注釋用英文分號(;)

configparser

1、python3里面自帶configparser模塊來讀取ini文件

# python3 import configParser

?

  敲黑板:python2的版本是Configparser

# python2 import ConfigParser

?

2、在pycharm里面,新建一個ini文件:右鍵New->File, 輸入框直接寫一個.ini后綴文件就行了,然后寫數據

?

?

3、ConfigParser 初始化對象

  使用ConfigParser 首選需要初始化實例,并讀取配置文件:

import configparser config = configparser.ConfigParser() config.read("ini", encoding="utf-8")

?

  

4、注釋里面有中文的話,這里代碼跟python2是有點區別的,python2里面直接conf.read(cfgpath)就可以了,python3需要加個參數:encoding=”utf-8”

import configparser config = configparser.ConfigParser() config.read("ini", encoding="utf-8")

?

  

  敲黑板:如果ini文件里面寫的是數字,讀出來默認是字符串

# coding:utf-8 # 作者:古風塵import configparser import os curpath = os.path.dirname(os.path.realpath(__file__)) cfgpath = os.path.join(curpath, "demo.ini") print(cfgpath) # demo.ini的路徑# 創建管理對象 conf = configparser.ConfigParser()# 讀ini文件 conf.read(cfgpath, encoding="utf-8") # python3# conf.read(cfgpath) # python2# 獲取所有的section sections = conf.sections()print(sections) # 返回list items = conf.items('db') print(items) # list里面對象是元祖

?

  運行結果:

D:\debug_p3\cfg\demo.ini ['db_host', 'concurrent','book'] [('db_port', '127.0.0.1'), ('db_user', 'root'), ('db_pass', 'root'), ('hosr_port', '69')]

ConfigParser 常用方法

獲取section節點

1、獲取所用的section節點

# 獲取所用的section節點 import configparser config = configparser.ConfigParser() config.read("ini", encoding="utf-8") print(config.sections()) #運行結果 # ['db', 'concurrent','book']

?

?2、獲取指定section 的options

  即將配置文件某個section 內key 讀取到列表中:

import configparser config = configparser.ConfigParser() config.read("ini", encoding="utf-8") r = config.options("db") print(r) #運行結果 # ['db_host', 'db_port', 'db_user', 'db_pass', 'host_port']

?

3、獲取指點section下指點option的值

import configparser config = configparser.ConfigParser() config.read("ini", encoding="utf-8") r = config.get("db", "db_host") # r1 = config.getint("db", "k1") #將獲取到值轉換為int型 # r2 = config.getboolean("db", "k2" ) #將獲取到值轉換為bool型 # r3 = config.getfloat("db", "k3" ) #將獲取到值轉換為浮點型 print(r) #運行結果 # 127.0.0.1

?

4、獲取指點section的所用配置信息

import configparser config = configparser.ConfigParser() config.read("ini", encoding="utf-8") r = config.items("db") print(r) #運行結果 #[('db_host', '127.0.0.1'), ('db_port', '69'), ('db_user', 'root'), ('db_pass', 'root'), ('host_port', '69')]

?

5、修改某個option的值,如果不存在則會出創建

# 修改某個option的值,如果不存在該option 則會創建 import configparser config = configparser.ConfigParser() config.read("ini", encoding="utf-8") config.set("db", "db_port", "69") #修改db_port的值為69 config.write(open("ini", "w"))

?

[db] db_host = 127.0.0.1 db_port = 69 db_user = root db_pass = root[concurrent] thread = 10 processor = 20

  

6、檢查section或option是否存在,bool值 import configparser config = configparser.ConfigParser() config.has_section("section") #是否存在該section config.has_option("section", "option") #是否存在該option

remove

1、如果想刪除section中的一項,比如我想刪除[email_163]下的port 這一行

# 刪除一個 section中的一個 item(以鍵值KEY為標識) conf.remove_option('concurrent', "thread")

?

2、刪除整個section這一項

conf.remove_section('concurrent') 3、刪除section 和 option import configparser config = configparser.ConfigParser() config.read("ini", encoding="utf-8") config.remove_section("default") #整個section下的所有內容都將刪除 config.write(open("ini", "w"))

?

[db] db_host = 127.0.0.1 db_port = 69 db_user = root db_pass = root[concurrent] thread = 10 processor = 20

  

add

1、新增一個section

# 添加一個select conf.add_section("emali_tel") print(conf.sections())

?

2、section里面新增key和value

# 往select添加key和value conf.set("emali_tel", "sender", "yoyo1@tel.com") conf.set("emali_tel", "port", "265")

?

3、添加section 和 option import configparser config = configparser.ConfigParser() config.read("ini", encoding="utf-8") if not config.has_section("default"): # 檢查是否存在sectionconfig.add_section("default") if not config.has_option("default", "db_host"): # 檢查是否存在該optionconfig.set("default", "db_host", "1.1.1.1") config.write(open("ini", "w"))

?

[db] db_host = 127.0.0.1 db_port = 69 db_user = root db_pass = root[concurrent] thread = 10 processor = 20[default] db_host = 1.1.1.1

  

write寫入

1、write寫入有兩種方式,一種是刪除原文件內容,重新寫入:w

conf.write(open(cfgpath, "w")) # 刪除原文件重新寫入

?

  另外一種是在原文件基礎上繼續寫入內容,追加模式寫入:a

conf.write(open(cfgpath, "a")) # 追加模式寫入

?

2、前面講的remove和set方法并沒有真正的修改ini文件內容,只有當執行conf.write()方法的時候,才會修改ini文件內容,舉個例子:在ini文件上追加寫入一項section內容

# coding:utf-8 import configparser import os curpath = os.path.dirname(os.path.realpath(__file__)) cfgpath = os.path.join(curpath, "cfg.ini") print(cfgpath) # cfg.ini的路徑# 創建管理對象 conf = configparser.ConfigParser()# 添加一個select conf.add_section("emali_tel") print(conf.sections())# 往select添加key和value conf.set("emali_tel", "sender", "yoyo1@tel.com") conf.set("emali_tel", "port", "265") items = conf.items('emali_tel') print(items) # list里面對象是元祖 conf.write(open(cfgpath, "a")) # 追加模式寫入

?

  運行后會發現ini文件最后新增了寫入的內容了

?3、寫入文件

  以下的幾行代碼只是將文件內容讀取到內存中,進過一系列操作之后必須寫回文件,才能生效

import configparser config = configparser.ConfigParser() config.read("ini", encoding="utf-8")

  

  寫回文件的方式如下:(使用configparser的write方法)

config.write(open("ini", "w"))  # 刪除原文件重新寫入

?

綜合實例:

#coding=utf-8import ConfigParserdef writeConfig(filename):config = ConfigParser.ConfigParser()  #創建ConfigParser實例# set dbsection_name = 'db'config.add_section( section_name )  #添加一個配置文件節點(strconfig.set( section_name, 'dbname', 'MySQL')config.set( section_name, 'host', '127.0.0.1')config.set( section_name, 'port', '80')config.set( section_name, 'password', '123456')config.set( section_name, 'databasename', 'test')# set appsection_name = 'app'config.add_section( section_name )config.set( section_name, 'loggerapp', '192.168.20.2')config.set( section_name, 'reportapp', '192.168.20.3')# write to fileconfig.write( open(filename, 'a') )  #寫入配置文件def updateConfig(filename, section, **keyv):config = ConfigParser.ConfigParser()config.read(filename)print config.sections()          #返回配置文件中節序列for section in config.sections():print "[",section,"]"items = config.items(section)    #返回某個項目中的所有鍵的序列for item in items:print "\t",item[0]," = ",item[1]print config.has_option("dbname", "MySQL")print config.set("db", "dbname", "11")  #設置db節點中,鍵名為dbname的值(11)print "..............."for key in keyv:print "\t",key," = ", keyv[key]config.write( open(filename, 'r+') )if __name__ == '__main__':file_name = 'test.ini'writeConfig(file_name)updateConfig(file_name, 'app', reportapp = '192.168.100.100')print "end__"

轉載于:https://www.cnblogs.com/gufengchen/p/10929463.html

總結

以上是生活随笔為你收集整理的configParser模块详谈的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。