簡體   English   中英

在讀取多個配置文件時,ConfigParser會覆蓋以前的文件,為什么?

[英]When reading multiple config files, ConfigParser overwrites previous files, why?

所以我想首先說我一直在尋找SO的答案,並且找不到任何有用的東西。 我也查看了Python的文檔,但未能找到有用的東西。 我的上一個問題有點懶,收到負面反饋,所以我盡我所能在這里提出一個簡單明了的問題。 一如既往,提前感謝您的幫助!

那么,有人可以解釋我在Python的ConfigParser中遇到的奇怪行為。 我有兩個不同的配置文件,每個文件都有一個Section 1 這兩個文件具有不同數量的選項,但覆蓋的選項數量較少。 這是代碼和輸出:

第一個配置文件:test1.ini

[Section 1]
Option 1 : One
Option 2 : Two
Option 3 : None
Option 4 : Four

第二個配置文件:test2.ini

[Section 1]
Option 1 : One
Option 2 : None
Option 3 : Three

讀取配置文件的驅動程序

from ConfigParser import SafeConfigParser

parser = SafeConfigParser()

def ParseThis(file, section):
    parser.read(file)

    for option in parser.options(section):
        print "\t" + option
        try:
            if parser.get(section, option) != 'None':
                print option + ": " + parser.get(section, option)
            else:
                print option + ": Option doesn't exist"
        except:
            print option + ": Something went wrong"

print "First File:"
print "Section 1"
ParseThis('test2.ini', 'Section 1')


print "\n"
print "Second File: "
print "Section 1"
ParseThis('test1.ini', 'Section 1')

print "\n"
print "First File: "
print "Section 1"
ParseThis('test2.ini', 'Section 1')

這是我得到的輸出,這沒有任何意義。

First File:
Section 1
    option 1
option 1: One
    option 2
option 2: Option doesn't exist
    option 3
option 3: Three


Second File: 
Section 1
    option 1
option 1: One
    option 2
option 2: Two
    option 3
option 3: Option doesn't exist
    option 4
option 4: Four


First File: 
Section 1
    option 1
option 1: One
    option 2
option 2: Option doesn't exist
    option 3
option 3: Three
    option 4   <== why this line?
option 4: Four <== why this line?

單個ConfigParser實例用於表示單個配置,該配置可以以“優先順序”從多個文件派生,以便后面的文件覆蓋之前的文件。 文檔沒有說明這一點,但確實說:

其設計使您可以指定潛在配置文件位置的列表(例如,當前目錄,用戶的主目錄和某些系統范圍的目錄),並且將讀取列表中的所有現有配置文件。

如果您希望將讀取的配置保持獨立,則需要為每個配置創建單獨的SafeConfigParser實例。 在函數內移動parser = SafeConfigParser()行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM