成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用Python內置模塊處理ini配置文件

開發 后端
本文不僅學習了如何使用初始化文件結構訪問文件中的值,還學習了如何操作和擴展它們。此外,您還了解了configparser的插值功能以及如何根據需要使用它們。

 ?[[353166]]??

簡介

開發人員每天都在處理一些大型而復雜的項目, 而配置文件會幫到我們并節省不少時間。在處理配置文件過程中,無需更改源代碼本身,只需要調整配置文件即可訪問不同的API接口、更新基礎URL信息或其它事情。

盡管可以通過多種方式來支持軟件中的配置文件,包括JSON,YAML和純文本文件,但本文旨在向您介紹 Python 標準庫中的configparser模塊。

注意:本文基于Python 3.9.0(CPython)。可以在GitHub上找到源代碼。(??https://github.com/DahlitzFlorian/how-to-work-with-config-files-in-python-article-snippets??)

文件結構

在編寫代碼之前,讓我們看一下實際配置文件的結構。 

[DEFAULT] admin_page = no landing_page = yes moderator_page = no  # looks good here  [moderator] moderator_page = yes  [admin] admin_page = yes moderator_page = yes 

在當前的示例中,我們有一個名為config.ini的配置文件。它由三個部分組成,每個部分都由一個標題和一個鍵-值對列表組成,該標題封裝在方括號內。

moderator和admin模塊只是鍵值對的集合,但DEFAULT模塊(第一個模塊)有些特殊。如果其他模塊之一未提供某個鍵的值,則它就會包含默認值。因此,如果您想嘗試訪問其他模塊中的值,但該鍵不存在,則解析器將從默認部分(如果存在)中返回該值,而不是引發KeyError。

在本例中,我們通過此配置文件管理用戶的頁面訪問。因此,默認部分代表普通用戶的權限,而moderator和admin模塊分別包含協管員和管理員的權限。

訪問文件的內容

ConfigParser對象是主要的配置解析器和configparser模塊的主要對象。您可以使用映射協議實現自己的配置解析器,讓我們繼續看看本文中的ConfigParser。

盡管ConfigParser接受很多參數,但我們將使用本文的默認值。讓我們在工作目錄中創建一個名為parser_playground.py的新文件。首先,我們從configparser模塊導入ConfigParser類,并創建該類的實例。 

# parser_playground.py from configparser import ConfigParser  config = ConfigParser() 

我們的配置對象不包含任何信息, 要更改此設置,我們需要先讀取config.ini文件。這可以通過調用ConfigParser實例(此處為config)的read()方法來完成。 

# previous code in parser_playground.py config.read("config.ini") 

讀取配置文件后,我們可以開始探索如何訪問其中存儲的信息。首先,我們要列出所有可用的部分。這可以通過使用ConfigParser的sections()方法來實現: 

# previous code in parser_playground.py print(f"Sections: {config.sections()}")  # Sections: ['moderator', 'admin'] 

此外,我們可以使用解析器的has_section()方法檢查某個模塊是否存在: 

# previous code in parser_playground.py print(f'Does a section called "admin" exist: {config.has_section("admin")}')  # True print(f'Does a section called "user" exist: {config.has_section("user")}')  # False print(f'Does a section called "DEFAULT" exist: {config.has_section("DEFAULT")}')  # False 

注意:調用sections()方法時,既未列出默認模塊·,也沒有被has_section()方法確認。

接下來,我們要訪問各個值。但是在使用其標識符訪問特定值之前,我們可以使用options()方法列出一個模塊的所有可用選項,并提供模塊名作為參數: 

# Previous code in parser_playground.py print(f'Options: {config.options("admin")}')  # Options: ['admin_page', 'moderator_page', 'landing_page'] 

此外,我們可以利用has_option()方法來檢查給定部分是否包含某個選項: 

# Previous code in parser_playground.py print(f'"admin_page" in "admin" section: {config.has_option("admin", "admin_page")}') 

要訪問模塊的值,可以使用解析器的get()方法并提供區域名稱和選項名稱。這些值將始終為字符串(如果存在)。如果需要其他格式的文件,請考慮使用相應的getboolean(),getint()和getfloat()方法。他們將嘗試將字符串解析為所需的數據類型。

總結本節內容時有個概念需要提到,它就是映射協議訪問。這個通用名稱意味著可以像處理字典一樣訪問值。也就是說,我們可以使用config [“ section”] [“ option”]類似的方法來訪問某個值,甚至檢查某個模塊中是否存在某個選項: 

# Previous code in parser_playground.py print("admin_page" in config["admin"])  # True print(config["admin"]["admin_page"])  # yes 

如何修改信息

接下來,讓我們看一下如何添加或更改信息并將其寫回到配置文件中。同樣,我們從模塊開始。要添加一個模塊,我們可以使用ConfigParser的add_section()方法。它接受模塊名稱作為字符串,并將相應模塊添加到解析器。提供不同的數據類型會導致TypeError。如果該模塊已經存在,則會引發DuplicateSectionError。嘗試將該模塊命名為默認值會導致ValueError。 

# Previous code in parser_playground.py config.add_section("unknown") print(f'Sections: {config.sections()}')  # Sections: ['moderator', 'admin', 'unknown'] 

要刪除一個模塊,只需使用remove_section()方法。 

# Previous code in parser_playground.py config.remove_section("unknown") print(f'Sections: {config.sections()}')  # Sections: ['moderator', 'admin'] 

Python的ConfigParser對象提供了類似的操作選項的方法。例如,調用set()方法,不僅可以向模塊添加新選項,還可以更新現有選項。同樣,如果您想完全刪除某個選項,請使用解析器的remove_option()方法。 

# Previous code in parser_playground.py config.set("admin", "admin_page", "false") config.remove_option("admin", "moderator_page") print(f'Options in "admin" section: {config.items("admin")}') 

處理完配置后,我們可以將其寫回到相同或不同的文件,如下所示: 

# Previous code in parser_playground.py with open("config1.ini", "w") as f:     config.write(f) 

插值

最后但也很重要的一點,讓我們看一下使ConfigParser優于Python的json模塊的東西:插值。插值意味著可以在調用某些get()方法返回值之前對其進行預處理。configparser模塊提供兩個插值類:BasicInterpolation和ExtendedInterpolation。第一個只允許重用配置文件中同一模塊中的選項,并且其語句不如后一個類的語句漂亮。這就是為什么我們只用ExtendedInterpolation類。

以下代碼段顯示了使用Extended Interpolation語句的配置文件。 

# interpolation_config.ini [paths] root_dir = /home/florian downloads_dir = ${root_dir}/Downloads  [destinations] app_dir = ${paths:downloads_dir}/application/python 

本質上,第一個模塊定義了根目錄的路徑。該路徑用作第二個選項的前綴,即下載目錄的路徑。在第二個模塊中,我們有一個選項app_dir,它重用了pahts模塊中對downloads目錄的定義。

為了掌握這一點,我們在實例化解析器時讓ConfigParser使用ExtendedInterpolation作為插值類型: 

# interpolation.py from configparser import ConfigParser from configparser import ExtendedInterpolation  config = ConfigParser(interpolation=ExtendedInterpolation()) config.read("interpolation_config.ini") 

如果現在打印destinations模塊的app_dir選項的值,則會得到一個插值字符串。 

# Previous code in interpolation.py print(config.get("destinations", "app_dir")) 


$ python interpolation.py /home/florian/Downloads/application/python 

概要 

本文不僅學習了如何使用初始化文件結構訪問文件中的值,還學習了如何操作和擴展它們。此外,您還了解了configparser的插值功能以及如何根據需要使用它們。

責任編輯:龐桂玉 來源: Python中文社區
相關推薦

2010-02-03 09:19:31

Python模塊

2021-07-13 05:47:40

GroovyJSON軟件開發

2024-03-19 08:05:00

C# WinForm文件開發

2021-07-05 12:09:58

Python編程語言

2021-12-02 18:15:39

網絡庫Ratel設計

2024-04-26 08:11:29

.NETJSONXML

2011-01-19 14:00:21

2011-01-13 16:27:26

Linux配置文件

2022-07-25 11:33:48

Python大文件

2010-12-28 16:35:32

Outlook 配置文

2010-12-27 14:59:31

Outlook 配置文

2010-03-18 18:17:01

Python 配置文件

2009-07-09 15:55:18

WebWork配置文件

2011-03-28 09:07:26

Nagios配置文件

2011-03-28 15:52:16

Nagios配置文件

2011-04-01 16:30:49

Nagios

2011-03-03 09:14:38

PureFTPd

2009-09-22 10:23:15

Hibernate配置

2010-05-05 16:14:09

Unix管理

2010-08-05 14:36:07

NFS服務
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产分类视频 | 欧美一级毛片久久99精品蜜桃 | 999久久久久久久久6666 | 91麻豆精品国产91久久久更新资源速度超快 | 北条麻妃视频在线观看 | 久久精品国产一区二区三区 | 日韩欧美二区 | 一级a性色生活片久久毛片波多野 | 日韩视频国产 | 亚洲美女一区 | 欧美日韩国产一区 | 99精品国产在热久久 | 一级毛片在线播放 | 艹逼网| 91视频在线观看 | 成人午夜精品 | 羞羞视频在线观看网站 | 久久久久国产视频 | 麻豆av网| 毛片一区二区三区 | 一起操网站 | 亚洲一区二区三区四区av | 成人在线免费观看视频 | 久久久久国产一区二区三区四区 | 亚洲香蕉 | 欧美日韩一区二区三区在线观看 | 精品国产18久久久久久二百 | 天天干天天操天天射 | 综合九九 | 91伊人| 国产精品揄拍一区二区 | 美女福利网站 | 亚洲日日夜夜 | 在线免费观看黄视频 | 亚洲视频一区二区三区 | 欧美成人久久 | 婷婷久久网 | 亚洲精品久久久久久下一站 | 久久er精品 | 91久久北条麻妃一区二区三区 | 久久天堂 |