2014-10-20 28 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

相关问题