1. 程式人生 > 程式設計 >python讀取ini配置的類封裝程式碼例項

python讀取ini配置的類封裝程式碼例項

這篇文章主要介紹了python讀取ini配置的類封裝程式碼例項,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

此為基礎封裝,未考慮過多異常處理

# coding:utf-8
import configparser
import os

class IniCfg():
  def __init__(self):
    self.conf = configparser.ConfigParser()
    self.cfgpath = ''

  def checkSection(self,section):
    try:
      self.conf.items(section)
    except Exception:
      print(">> 無此section,請核對[%s]" % section)
      return None
    return True

  # 讀取ini,並獲取所有的section名
  def readSectionItems(self,cfgpath):
    if not os.path.isfile(cfgpath):
      print(">> 無此檔案,請核對路徑[%s]" % cfgpath)
      return None
    self.cfgpath = cfgpath
    self.conf.read(cfgpath,encoding="utf-8")
    return self.conf.sections()

  # 讀取一個section,list裡面物件是元祖
  def readOneSection(self,section):
    try:
      item = self.conf.items(section)
    except Exception:
      print(">> 無此section,請核對[%s]" % section)
      return None
    return item

  # 讀取一個section到字典中
  def prettySecToDic(self,section):
    if not self.checkSection(section):
      return None
    res = {}
    for key,val in self.conf.items(section):
      res[key] = val
    return res

  # 讀取所有section到字典中
  def prettySecsToDic(self):
    res_1 = {}
    res_2 = {}
    sections = self.conf.sections()
    for sec in sections:
      for key,val in self.conf.items(sec):
        res_2[key] = val
      res_1[sec] = res_2.copy()
      res_2.clear()
    return res_1

  # 刪除一個 section中的一個item(以鍵值KEY為標識)
  def removeItem(self,section,key):
    if not self.checkSection(section):
      return
    self.conf.remove_option(section,key)

  # 刪除整個section這一項
  def removeSection(self,section):
    if not self.checkSection(section):
      return
    self.conf.remove_section(section)

  # 新增一個section
  def addSection(self,section):
    self.conf.add_section(section)

  # 往section新增key和value
  def addItem(self,key,value):
    if not self.checkSection(section):
      return
    self.conf.set(section,value)

  # 執行write寫入,remove和set方法並沒有真正的修改ini檔案內容,只有當執行conf.write()方法的時候,才會修改ini檔案內容
  def actionOperate(self,mode):
    if mode == 'r+':
      conf.write(open(self.cfgpath,"r+",encoding="utf-8"))  # 修改模式
    elif mode == 'w':
      conf.write(open(self.cfgpath,"w"))           # 刪除原檔案重新寫入
    elif mode == 'a':
      conf.write(open(self.cfgpath,"a"))           # 追加模式寫入

cfgpath = r'C:\Users\SXF\Desktop\config.ini'

inicfg = IniCfg()
sections = inicfg.readSectionItems(cfgpath)
print(sections)
content = inicfg.readOneSection('chaoji')
print(content)
dic = inicfg.prettySecToDic('chaoji')
print(dic)
dic = inicfg.prettySecsToDic()
print(dic)
inicfg.addSection('chaoji22')

content = inicfg.readOneSection('chaoji')
print(content)

測試ini

[chaoji]
chaoji_username = 123
chaoji_password = 456
[my]
soft_id     = 789
sleeptime     = asd
cnt_count     = zxc

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。