2014-10-20 104 views
4

所以我想首先說我一直在尋找答案,並沒有找到有用的東西。我也瀏覽了Python的文檔,但沒有找到有用的東西。我的最後一個問題是稍微懶惰,並收到了負面反饋,所以我盡我所能在這裏提出一個簡單而直接的問題。一如既往,在此先感謝您的幫助!當讀取多個配置文件時,ConfigParser會覆蓋以前的文件,爲什麼?

那麼,有人可以解釋一下我在Python的ConfigParser中遇到的奇怪行爲。我有兩個不同的配置文件,每個都有Section 1。這兩個文件具有不同數量的選項,但具有較少選項的文件將被覆蓋。下面是代碼和輸出:讀取配置文件test2.ini

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

司機:

首先配置文件:TEST1.INI

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

其次配置文件

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 

回答

8

單個ConfigParser實例旨在表示一個單一的結構中,其可以從多個文件在一個「優先順序」,使得後來的文件重寫早期的導出。文檔沒有讓這個完全清楚,但並說:

這樣的設計,讓您可以指定潛在的配置文件位置的列表(例如,在當前目錄下,用戶的主目錄,以及一些系統範圍內的目錄),並且列表中的所有現有配置文件都將被讀取。

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

+0

「文檔不會完全清楚」「已同意 – dtmland 2017-11-21 20:54:09

相關問題