国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python模塊之configparser

荊兆峰 / 2056人閱讀

摘要:由于這種需求非常普遍,配置解析器提供了一系列更簡(jiǎn)便的方法來處理整數(shù)浮點(diǎn)數(shù)及布爾值。注意點(diǎn)方法對(duì)大小寫不敏感,能識(shí)別和為對(duì)應(yīng)的布爾值后備值和字典一樣,可以使用的方法提供后備值需要注意的是,默認(rèn)值的優(yōu)先級(jí)高于后備值。

快速開始
# demo.ini

[DEFAULT]
ServerAliveInterval = 45
Compression = yes
CompressionLevel = 9
ForwardX11 = yes

[bitbucket.org]
User = hg

[topsecret.server.com]
Port = 50022
ForwardX11 = no

上面的demo.ini是一個(gè)非常基礎(chǔ)的配置文件,它由多個(gè)部分(section)組成,每部分包含了帶值的選項(xiàng)。ConfigParse類的實(shí)例可以對(duì)其進(jìn)行讀寫操作。

創(chuàng)建配置文件:

import configparser

config = configparser.ConfigParser()
config["DEFAULT"] = {"ServerAliveInterval": "45",
                     "Compression": "yes",
                     "CompressionLevel": "9",
                     "ForwardX11": "yes"}

config["bitbucket.org"] = {}
config["bitbucket.org"]["User"] = "hg"

config["topsecret.server.com"] = {}
topsecret = config["topsecret.server.com"]
topsecret["Port"] = "50022"
topsecret["ForwardX11"] = "no"

with open("demo.ini", "w") as configfile:
    config.write(configfile)

對(duì)配置解析器的處理與字典類似。

讀取配置文件:

>>> config = configparser.ConfigParser()
>>> config.sections()
[]
>>> config.read("demo.ini")
["demo.ini"]
>>> config.sections()
["bitbucket.org", "topsecret.server.com"]
>>> "bitbucket.org" in config
True
>>> "bitbong.com" in config
False
>>> config["bitbucket.org"]["User"]
"hg"
>>> config["DEFAULT"]["Compression"]
"yes"
>>> topsecret = config["topsecret.server.com"]
>>> topsecret["ForwardX11"]
"no"
>>> for key in config["bitbucket.org"]:
...     print(key)
user
serveraliveinterval
compression
compressionlevel
forwardx11
>>> config["bitbucket.org"]["ForwardX11"]
"yes"

注意點(diǎn):[DEFAULT]為其他所有section提供默認(rèn)值,section中的所有鍵大小寫不敏感并以小寫字母存儲(chǔ)

支持的數(shù)據(jù)類型

配置解析器總是存儲(chǔ)配置的值為字符串類型,因此用戶需要按需轉(zhuǎn)換為期望的數(shù)據(jù)類型。由于這種需求非常普遍,配置解析器提供了一系列更簡(jiǎn)便的方法來處理整數(shù)(getint())、浮點(diǎn)數(shù)(getfloat())及布爾值(getboolean())。用戶也可以自行注冊(cè)轉(zhuǎn)換器或定制配置解析器已提供的轉(zhuǎn)換器。

>>> topsecret.getboolean("ForwardX11")
False
>>> config["bitbucket.org"].getboolean("ForwardX11")
True
>>> config.getboolean("bitbucket.org", "Compression")
True

注意點(diǎn):getboolean()方法對(duì)大小寫不敏感,能識(shí)別"yes"/"no", "on"/"off", "true"/"false"和"1"/"0"為對(duì)應(yīng)的布爾值

后備值(Fallback Values)

和字典一樣,可以使用section的get()方法提供后備值:

>>> topsecret.get("CompressionLevel")
"9"
>>> topsecret.get("Cipher")
>>> topsecret.get("Cipher", "3des-cbc")
"3des-cbc

需要注意的是,默認(rèn)值的優(yōu)先級(jí)高于后備值。比如要想在"topsecret.server.com"中獲取"CompressionLevel"的值,即使指定了后備值,仍然得到的是"DEFAULT"中的值:

>>> topsecret.get("CompressionLevel", "3")
"9"

此外,除了section的get()方法,還提供了解析器級(jí)別的get()方法,支持向后兼容,后備值通過fallback關(guān)鍵字指定:

>>> config.get("bitbucket.org", "monster", fallback="No such things as monsters")
"No such things as monsters"

fallback關(guān)鍵字同樣支持在getint(), getfloat()getboolean()中使用

支持的INI文件結(jié)構(gòu)

配置文件由section組成,每個(gè)section以[section_name]的形式打頭,后跟以特定字符(默認(rèn)是=:)分隔的鍵值對(duì)。

默認(rèn)情況下section名稱區(qū)分大小寫,鍵不區(qū)分大小寫。

鍵、值的頭部和尾部空格自動(dòng)移除。

值可以省略,在這種情況下分隔符也可以不要。

值可以跨多行,只要其他行的值比第一行的值縮進(jìn)更深。

空行可以被忽略或視作多行值的一部分(取決于解析器模式)。

可以包含注解,獨(dú)占一行顯示,默認(rèn)以字符#;為前綴。應(yīng)該避免注解與鍵或值處在同一行,因?yàn)檫@將導(dǎo)致把注解視為值的一部分。

[Simple Values]
key=value
spaces in keys=allowed
spaces in values=allowed as well
spaces around the delimiter = obviously
you can also use : to delimit keys from values

[All Values Are Strings]
values like this: 1000000
or this: 3.14159265359
are they treated as numbers? : no
integers, floats and booleans are held as: strings
can use the API to get converted values directly: true

[Multiline Values]
chorus: I"m a lumberjack, and I"m okay
    I sleep all night and I work all day

[No Values]
key_without_value
empty string value here =

[You can use comments]
# like this
; or this

# By default only in an empty line.
# Inline comments can be harmful because they prevent users
# from using the delimiting characters as parts of values.
# That being said, this can be customized.

    [Sections Can Be Indented]
        can_values_be_as_well = True
        does_that_mean_anything_special = False
        purpose = formatting for readability
        multiline_values = are
            handled just fine as
            long as they are indented
            deeper than the first line
            of a value
        # Did I mention we can indent comments, too?
插值

ConfigParser支持插值,調(diào)用get()方法返回值之前將對(duì)值進(jìn)行預(yù)處理

class configparser.BasicInterpolation

默認(rèn)使用的Interpolation類。允許值包含格式化字符串,該字符串引用同一section中的值或DEFAULTSECTsection中的值。其他默認(rèn)值可以在初始化時(shí)提供。

[Paths]
home_dir: /Users
my_dir: %(home_dir)s/lumberjack
my_pictures: %(my_dir)s/Pictures

在上面的例子中,interpolation設(shè)置為BasicInterpolation()的ConfigParser將解析%(home_dir)shome_dir的值,%(my_dir)s將解析為/Users/lumberjack。引用鏈中使用的鍵不需要在配置文件中以任何特定的順序指定。

如果interpolation設(shè)置為None,將直接返回%(home_dir)s/lumberjack作為my_dir的值。

class configparser.ExtendedInterpolation

擴(kuò)展的Interpolation類,實(shí)現(xiàn)了更高級(jí)的語法。它使用${section:option}表示來自外部section的值,如果省去了section:,默認(rèn)指當(dāng)前section(以及可能的DEFAULTSECTsection的值)

[Common]
home_dir: /Users
library_dir: /Library
system_dir: /System
macports_dir: /opt/local

[Frameworks]
Python: 3.2
path: ${Common:system_dir}/Library/Frameworks/

[Arthur]
nickname: Two Sheds
last_name: Jackson
my_dir: ${Common:home_dir}/twosheds
my_pictures: ${my_dir}/Pictures
python_dir: ${Frameworks:path}/Python/Versions/${Frameworks:Python}
映射協(xié)議訪問

映射協(xié)議訪問是允許像操作字典一樣使用自定義對(duì)象的功能的通用名稱。在configparser中,映射接口通過parser["section"]["option"]的形式實(shí)現(xiàn)。

parser["section"]返回解析器中section的值的代理,值從原始解析器中獲取但并非通過復(fù)制的方式。在section代理上改變值的操作,實(shí)際上是對(duì)原始解析器的改變。

configparser對(duì)象雖然表現(xiàn)的盡可能接近字典,但仍有一些區(qū)別需要注意:

默認(rèn)情況下,section中的所有key能夠以大小寫不敏感的方式訪問。例如for option in parser["section"]語句生成的option名稱總是被optionxform函數(shù)轉(zhuǎn)換為小寫。擁有"a"選項(xiàng)的section通過以下兩種方式訪問都將返回True:

"a" in parser["section"]
"A" in parser["section"]

所有section都包含DEFAULTSECT的值,也就是說,對(duì)section的.clear()操作可能并沒有真正的清空,這是因?yàn)闊o法從該section刪除默認(rèn)值。在除DEFAULTSECT以外的section上刪除默認(rèn)值(前提是沒有對(duì)默認(rèn)值重寫)將拋出KeyError異常

>>> del topsecret["forwardx11"]
>>> topsecret["forwardx11"]
"yes"
>>> del topsecret["serveraliveinterval"]
Traceback (most recent call last):
  ...
    raise KeyError(key)
KeyError: "serveraliveinterval"

DEFAULTSECT不能從解析器移除

刪除它將拋出ValueError異常

parser.clear()操作對(duì)它沒有任何影響

parser.popitem()不會(huì)返回DEFAULTSECT

>>> del config["DEFAULT"]
Traceback (most recent call last):
  ...
    raise ValueError("Cannot remove the default section.")
ValueError: Cannot remove the default section.
>>> config.clear()
>>> config["DEFAULT"]["serveraliveinterval"]
"45"

parser.get(section, option, **kwargs) - 第二個(gè)參數(shù)并非字典的get()方法表示的后備值,但section級(jí)別的get()方法與映射協(xié)議卻是兼容的

parser.items(raw=False, vars=None)兼容映射協(xié)議(返回包含DEFAULTSECT的(section_name, section_proxy)對(duì)的列表)。另有指定section的調(diào)用方式:parser.items(section, raw=False, vars=None).后者返回指定section的(option, value)對(duì)的列表,raw參數(shù)指定value中的格式化字符串是否插值表示

>>> list(config.items())
[("DEFAULT", ), ("bitbucket.org", ), ("topsecret.server.com", )]
>>> list(config.items("bitbucket.org"))
[("serveraliveinterval", "45"), ("compression", "yes"), ("compressionlevel", "9"), ("forwardx11", "yes"), ("user", "hg")]
自定義解析器行為

省略

舊版API示例

省略

ConfigParser對(duì)象

class configparser.ConfigParser(defaults=None, dict_type=dict, allow_no_value=False, delimiters=("=", ":"), comment_prefixes=("#", ";"), inline_comment_prefixes=None, strict=True, empty_lines_in_values=True, default_section=configparser.DEFAULTSECT, interpolation=BasicInterpolation(), converters={})

defaults()
返回包含實(shí)例范圍默認(rèn)值的字典

sections()
返回可用section的名稱列表(不包含默認(rèn)section的名稱)

add_section(section)
添加section。如果該section已經(jīng)存在,拋出DuplicateSectionError異常;如果傳入的是默認(rèn)section的名稱,拋出ValueError異常;如果傳入的參數(shù)不是字符串類型,拋出TypeError異常

has_section(section)
判斷section是否存在。默認(rèn)section總是返回False

options(section)
返回指定section的可用選項(xiàng)列表(包含DEFAULTSECT中的選項(xiàng))。指定默認(rèn)section將拋出NoSectionError異常

has_option(section, option)
如果section存在且包含指定的option,返回True,否則返回False。如果傳遞的section為None"",視為默認(rèn)section

read(filenames, encoding=None)
讀取并解析可迭代的文件名,返回成功解析的文件名列表

如果filenames是一個(gè)字符串,或字節(jié)對(duì)象又或者是類路徑對(duì)象,視其為單個(gè)文件。如果filenames中的某個(gè)文件不能打開,該文件將被忽略

如果filenames中所有文件都不存在,ConfigParser實(shí)例將包含空數(shù)據(jù)集。如果某個(gè)應(yīng)用需要導(dǎo)入初始化值,應(yīng)該在調(diào)用read()導(dǎo)入可選配置文件前調(diào)用read_file()讀取相應(yīng)的初始化配置文件,因?yàn)?b>read_file()讀取不能打開的文件時(shí)會(huì)拋出FileNotFoundError異常,而不會(huì)直接忽略

import configparser, os

config = configparser.ConfigParser()
config.read_file(open("defaults.cfg"))
config.read(["site.cfg", os.path.expanduser("~/.myapp.cfg")],
            encoding="cp1250")

read_file(f, source=None)
從可迭代生成Unicode字符串的f(例如以文本模式打開的文件對(duì)象)讀取及解析配置數(shù)據(jù)

read_string(string, source="")
從字符串中解析配置數(shù)據(jù)

read_dict(dictionary, source="")
從提供類似dict的items()方法的對(duì)象加載配置。key是section名稱,value是包含選項(xiàng)和值的字典。如果使用的字典類型支持保留順序,section及其選項(xiàng)將按序添加,所有值自動(dòng)轉(zhuǎn)換為字符串

get(section, option, * , raw=False, vars=None[, fallback])
獲取指定section的選項(xiàng)的值。vars參數(shù)作為字典對(duì)象傳遞。option按照vars,section,DEFAULTSECT的順序進(jìn)行查找,如果不存在且提供了fallback參數(shù),返回fallback的值,fallback可以是None

raw參數(shù)指定value中的格式化字符串是否插值表示,與option的查找順序相同

getint(section, option, * , raw=False, vars=None[, fallback])
轉(zhuǎn)換option的值為int類型

getfloat(section, option, * , raw=False, vars=None[, fallback])
轉(zhuǎn)換option的值為float類型

getboolean(section, option, * , raw=False, vars=None[, fallback])
轉(zhuǎn)換option的值為bool類型

items(raw=False, vars=None)
items(section, raw=False, vars=None)
前者返回包含DEFAULTSECT的(section_name, section_proxy)對(duì)的列表。后者返回指定section的(option, value)對(duì)的列表

set(section, option, value)
如果section存在,設(shè)置option的值為value,否則拋出NoSectionError異常。option和value必須是字符串類型,否則拋出TypeError異常

write(fileobject, space_around_delimiters=True)
將ConfigParser對(duì)象寫入以文件模式打開的文件。

remove_option(section, option)
從section中移除指定的選項(xiàng)。如果section不存在,拋出NoSectionError異常。如果option存在返回True,否則返回False

remove_section(section)
移除指定section。如果section存在返回True,否則返回False(對(duì)默認(rèn)section的操作總是返回False)

optionxform(option)
對(duì)option的處理函數(shù),默認(rèn)返回option的小寫形式。可以通過繼承重寫或設(shè)置ConfigParser實(shí)例的optionxform屬性(接收一個(gè)字符串參數(shù)并返回一個(gè)新的字符串的函數(shù))改變默認(rèn)行為。

cfgparser = ConfigParser()
cfgparser.optionxform = str

讀取配置文件時(shí),option兩邊的空格在調(diào)用此函數(shù)前先被移除

readfp(fp, filename=None)
已棄用,使用 read_file()替代

configparser.MAX_INTERPOLATION_DEPTH
當(dāng)raw參數(shù)為false時(shí),get()方法遞歸插值的最大深度。僅在使用默認(rèn)的BasicInterpolation時(shí)才有意義

RawConfigParser對(duì)象

省略

異常

省略

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/42610.html

相關(guān)文章

  • Python解析配置模塊ConfigParser詳解

    摘要:解析配置模塊之詳解基本的讀取配置文件直接讀取文件內(nèi)容得到所有的,并以列表的形式返回得到該的所有得到該的所有鍵值對(duì)得到中的值,返回為類型得到中的值,返回為類型,還有相應(yīng)的和函數(shù)。是最基礎(chǔ)的文件讀取類,支持對(duì)變量的解析。 Python 解析配置模塊之ConfigParser詳解 1.基本的讀取配置文件 -read(filename) 直接讀取ini文件內(nèi)容 -sections() 得到所有...

    weknow619 評(píng)論0 收藏0
  • python--模塊2

    摘要:可能沒有用戶輸出的消息創(chuàng)建一個(gè),用于寫入日志文件再創(chuàng)建一個(gè),用于輸出到控制臺(tái)對(duì)象可以添加多個(gè)和對(duì)象序列化模塊什么叫序列化將原本的字典列表等內(nèi)容轉(zhuǎn)換成一個(gè)字符串的過程就叫做序列化。 hashlib模塊 1.Python的hashlib提供了常見的摘要算法,如MD5,SHA1等等。什么是摘要算法呢?摘要算法又稱哈希算法、散列算法。它通過一個(gè)函數(shù),把任意長(zhǎng)度的數(shù)據(jù)轉(zhuǎn)換為一個(gè)長(zhǎng)度固定的數(shù)據(jù)串(...

    13651657101 評(píng)論0 收藏0
  • 【自動(dòng)化測(cè)試】Python 讀取 .ini 格式文件

    摘要:大家應(yīng)該接觸過格式的配置文件。特別是后續(xù)做自動(dòng)化的測(cè)試,需要拎出一部分配置信息,進(jìn)行管理。二讀取文件自帶有讀取配置文件的模塊,配置文件不區(qū)分大小寫。讀取文件內(nèi)容得到所有的,并以列表的形式返回。 大家應(yīng)該接觸過.ini格式的配置文件。配置文件就是把一些配置相關(guān)信息提取出去來進(jìn)行單獨(dú)管理,如果以后有變動(dòng)只需改配置文件,無需修改代碼。特別是后續(xù)做自動(dòng)化的測(cè)試,需要拎出一部分配置信息,進(jìn)行管...

    Eric 評(píng)論0 收藏0
  • PyCharm的安裝、設(shè)置及使用

    摘要:的簡(jiǎn)介隨著近年來的火爆程度逐年攀升越來越多的開發(fā)者開始因其豐富的庫(kù)支持簡(jiǎn)潔高效的語法以及強(qiáng)大的運(yùn)算速度而對(duì)其紛紛側(cè)目也正因此及基于它而生的各類框架如等普遍應(yīng)用于當(dāng)下各類場(chǎng)景下作為時(shí)代的弄潮兒大有獨(dú)領(lǐng)風(fēng)騷之勢(shì)也正是因此毫無疑問是當(dāng)前最好的編程 PyCharm的簡(jiǎn)介 隨著近年來Python的火爆程度逐年攀升,越來越多的開發(fā)者開始因其豐富的庫(kù)支持,簡(jiǎn)潔高效的語法以及強(qiáng)大的運(yùn)算速度而對(duì)其紛紛側(cè)...

    jzzlee 評(píng)論0 收藏0
  • Python Tips

    摘要:的三種數(shù)據(jù)類型字典列表元組,分別用花括號(hào)中括號(hào)小括號(hào)表示。約等于上句,可能是因?yàn)樽远x變量名與內(nèi)部函數(shù)或變量同名了。下,默認(rèn)路徑一般為。的日志模塊中計(jì)時(shí)器定時(shí)器計(jì)劃任務(wù),。對(duì)象的問題怎樣忽略警告不打印煩人的警告打印到終端同時(shí)記錄到文件。 Python Enhancement Proposal。(PEP,Python增強(qiáng)建議書) Python之禪(import this) Pytho...

    Reducto 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<