Python 添加配置文件(.ini, .py, .json, etc)


配置文件必要性

  1. 集中管理,統一修改,降低修改難度,避免修改不全面
  2. 代碼和參數分離,方便不同模塊代碼中重復調用,保持核心代碼整潔

常用配置文件比較

配置文件復雜度比 ini < json ≈ toml < yaml

格式類型 優點 缺點
config.ini 通用格式,格式簡單 不適合存儲大量數據
config.json 通用格式,可嵌套,適合存放大量的結構化配置或者本地數據 嵌套過深的問題,容易導致出錯;語法標准嚴格限制,無法在當中寫注釋
config.py / setting.py 在python工程中方便通過import方式導入 不利於非 Python 的平台進行配置文件共享

1. ini 配置文件[1]

使用 “ import configparser ”導入configparser模塊,即可實現配置文件的寫入、更新、刪除、讀取等操作。

:

config.get("section", "option") # 獲取指定section下的options

config.getint("section", "option") # 將獲取到值轉換為int型

config.getboolean("section", "option") # 將獲取到值轉換為bool型

config.getfloat("section", "option") # 將獲取到值轉換為浮點型

更新:

config.set("section_mod", "option", "option_value") # 修改section_mod的option

config.add_section("section_add") # 添加section節點

config.set("section_add", "option", "option_value") # 設置指定section_add的options

檢查:

config.options('section') # 獲取指定section 的options即該節點的所有鍵

config.has_section("section") # 是否存在該section

config.has_option("section", "option") # 是否存在該option

刪除:

config.remove_section("section_rmv") # 整個section_rmv下的所有內容都將刪除

config.remove_option("section_rmv", 'option') # 刪除section_rmv下的指定option

保存:

config.write(open("Config", "w")) # 保存config

注意事項

  1. 讀取都是字符串,無需在配置的時候寫成字符串

  2. 讀取字符串不區分大小寫

參考鏈接 1.

2. json 配置文件

>>> import json
>>> from pprint import pprint
>>> with open('/Users/Bobot/db.json') as j:
...   cfg = json.load(j)['localdb']
... 
>>> pprint(cfg)
{'database': 'mysql',
 'host': '127.0.0.1',
 'password': '123456',
 'port': 3306,
 'user': 'root'}

使用json.load()讀取json文件,讀入的詞典,無法直接用鍵值當做變量,常規需要 database = cfg ['database'] 賦值方式來配置變量,若變量增多,配置過程會非常繁瑣。通過 globals().update(config) 可以實現字典的變量訪問,globals() 獲得(模塊級)全局變量所組成的字典,修改該字典等同修改全局變量,所以通過 .update(config) 可以將 config 字典內容轉為變量[2]

a_dict = {"key": "value"}
globals().update(a_dict)
print(key)

3. 初始化類

config.ini

[first_section]
option1 = 1
option2 = 0
option3 = 3.4

config.json

{
    "localdb":{
        "host": "127.0.0.1",
        "user": "root",
        "password": "123456",
        "port": 3306,
        "database": "mysql"
    }
}

initDemo()

import configparser
import json

class initDemo():
    def __init__(self,fp1,fp2):
        self.fp1 = fp1 # .json 文件路徑
        self.fp2 = fp2 # .ini 文件路徑

    def read_json_config(self):
        """"讀取json配置文件"""
        with open(self.fp1) as json_file:
            config = json.load(json_file)['localdb']
        return config

    def read_ini_config(self):
        
        """"讀取ini配置文件"""
        config = configparser.ConfigParser()
        config.read(self.fp2, encoding="utf-8")

        first_section_items = dict(config.items("first_section"))
        all_keys = config.options('first_section') # 只能識別小寫,獲取指定section 的options即該節點的所有鍵
        
        item1 = config.getint('first_section','item1') # 將獲取到值轉換為int型
        itme2 = config.getboolean('first_section','item2') # 將獲取到值轉換為bool型
        item3 = config.getfloat('first_section','item3') # 將獲取到值轉換為浮點型
        return 

    def update_json_config(self, config):
        """"更新配置文件"""
        with open(self.fp1, 'w') as json_file:
            json.dump(config, json_file)
        return None

  1. python中配置文件的使用方法 ↩︎

  2. Python3.用json作為配置文件 ↩︎


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM