Python - 基礎知識專題 - 配置檔案與日誌管理(正在寫作)

李俊才發表於2020-12-28

Python中使用配置檔案與日誌管理


注:本文正在寫作中,敬請期待

由於博主水平有限,疏忽在所難免。

若發現問題請聯絡博主:李俊才

郵箱:291148484@163.com

希望對大家所有幫助,感謝朋友們的支援與鼓勵!


【導論】 這實際上是一個實戰相關的話題,因為很難想象很難在一個實際應用的系統中不存在配置與日誌。通過學習本文相關知識,你能學習到如何使用python建立和使用配置檔案,如何建立和管理日誌。本文將帶你用一些案例與實戰專案掌握相關內容。


1. 配置檔案


1.1 配置檔案地使用情景

在某些時候,如報表自動化小軟體的開發實踐中,我們很少做一個絢麗在這裡插入程式碼片GUI介面並配置一個小型資料庫去記錄相關的執行引數,但從軟體的功能需求上,某些執行引數卻需要依據特定的時間、空間條件做靈活的修改,這時我們就需要使用配置檔案的方法來迅速地達到目的。

1.2 Python配置檔案分析器

1.2.1 什麼是INI檔案

1. INI檔案簡介

字尾為“.ini”的配置檔案最初是僅windows的系統配置檔案所採用的一個儲存格式,由於這種格式表達意義清晰便且小巧簡便,目前在程式設計中廣泛應用。從本質上說INI檔案是一個儲存字元流資料的文字檔案,它與普通的文字檔案相比有著特殊的資料表示結構。以下例項是某ini檔案開啟後的內容。
【Code1】INI檔案結構示例。

; ini檔案中可以用";"來表示註釋
[Section1_Name]
Key1Name = value1
Key2Name = value2

# ini檔案中也可以用"#"來表示註釋
[Section2_Name]
Key1Name = value1
Key2Name = value2

從【Code1】中可以看出,其在結構上的特點是一個檔案由多個部分組成,每個部分都稱作一個SECTION

2. INI檔案與字典

我們已經看到,INI檔案的section與python中的字典在概念上十分類似,也是由鍵值對構成的。任意一個SECTION都包含帶有值的鍵,也就是說INI檔案是鍵值對結構,這一點在表面上看與Python中的字典除了記錄的形式不同,其它的是沒有區別的。如果你真的這樣認為那就錯了。請注意:

· INI檔案的鍵值只能儲存字串資料!
根據我們以往的經驗,Python的字典是一個複合的資料結構。現在請讀者思考【Code2】中直接獲取SECTION - “MySection”中鍵“FilePath ”和鍵“MyList”的值將得到什麼。

【Code2】一個反例

[MySection]
FilePath = r'C:\ProgramData\ssh'
MyList = [1,2,3,4,5,6]
  • 對於鍵FilePath,其值是我們在Windows系統中程式設計時常用的路徑寫法,我們期望獲得的是這樣一個表示路徑的結果:“C:\ProgramData\ssh”,但實際上我們將獲得的是完整的字串"r’C:\ProgramData\ssh’"。其原因就在於INI檔案儲存的不是複合資料型別而僅僅只是字串型別。
  • 同理,在理解獲取FilePath鍵值後鍵MyList的值就好理解了,我們是不會得到一個Python列表的,能得到的只是一個可以用於定義該列表的字串“[1,2,3,4,5,6]”。

但是可能有讀者說了,我就是想按照上面的寫法表示我的路徑或者表示一個複合的Python資料型別,那有沒有方法呢?當然是有的。不過別急,我們在後邊的內容將會有詳細的介紹。

1.2.2 用Python操作INI檔案

在講解各種方法前,我們線給出一段INI檔案程式碼如【Code3】所示,它將是我們本節講解中建立或所用的INI檔案內容:
【Code3】待建立或讀取的INI檔案的內容

[DEFAULT]
Name = LiHua
Age = 16
Gender = Male

[Score]
Chinese = 99
English = 63
Math = 90
Physics= 87

[XinDongFang.chef.com]
RegistrationTime = 20201227
SuperUser = True

在Python中內建了配置檔案分析器模組,我們只要按照如下方法匯入configparser模組即可使用。
【Code4】匯入configparser模組

import configparser
1 . INI檔案建立的方法

【Code5】函式式建立ini檔案例項

# **
# @author:Jack Lee
# **
import configparser                   # Import configparser module

def ini_wrighter(savePath, *dicts):
   """Map multiple dictionaries to multiple Section and create a single INI file in the directory savePath"""
   config = configparser.ConfigParser()      # Create an instance object of the class "configparser.ConfigParser"
   
   for i in dicts:
       if not isinstance(i,dict):
           raise ValueError('Only dict in Python can be converted to a section in INI file!')
       section_name = str(i["SectionName"])
       del(i["SectionName"])
       config[section_name] = i
   
   with open(savePath, 'w') as configfile:  # Save to file
       config.write(configfile)

# Defines the first dictionary to be stored as an INI file
DEFAULT = {"Name":"LiHua", "Age":16, "Gender":"Male", "SectionName":"DEFAULT"}     
# Defines the second dictionary to be stored as an INI file
Score = {"Chinese":99, "English":63, "Math":90, "Physics":87, "SectionName":"Score"}
# Define the third dictionary to be stored as INI file
OtherInfos = {"RegistrationTime":"20201227", "SuperUser":True, "SectionName":"XDFang.chef.com"}

savePath = r'C:\Users\JackLee\Desktop\myConfig.ini'

# Call our defined function and store the configuration file
ini_wrighter(savePath, DEFAULT, Score, OtherInfos) 

執行上述程式碼,在我的電腦路徑’C:\Users\JackLee\Desktop’下可以發現生成了一個新檔案myConfig.ini:
圖1
開啟該檔案,顯示內容如圖2所示
在這裡插入圖片描述
你也許已經發現,雖然在Code5中定義儲存到INI檔案的字典的鍵值含有True這樣的布林值,但通過以上方法儲存到INI檔案時,被自動轉換成了字串,也就是說適應INI的字串儲存的這個過程是不需要我們認為程式設計實現的。

2. INI檔案讀取的方法

現在我們已經建立並儲存了配置檔案,下面讓我們回讀它。


1.3 實戰案例


2. 日誌管理(敬請期待)


2.1

相關文章