如何使用Python的configparser模块读取配置文件?

6

我正在使用Python(3.7)中的configparser模块读取外部配置文件。

这是我的示例配置文件config.ini

[ABC]
ch0 = "C:/Users/utility/ABC-ch0.txt"
ch1 = "C:/Users/utility/ABC-ch1.txt"

[settings]
script = "C:/Users/OneDrive/utility/xxxx.exe"
settings = "C:/Users/OneDrive/xxxxxxConfig.xml"

这是我尝试的示例代码:
import configparser
config = configparser.ConfigParser()

config.read('config.ini')
ch0 = config.get('ABC','ch0')
print(ch0)

以下是我得到的错误代码,不确定我做错了什么:

NoSectionError: No section: 'ABC'


任何帮助都非常感激。提前感谢您。

打印出 config.read('config.ini') 的返回值并发布结果。 - Klaus D.
代码在我这里完美地运行,你提供的 python 3.7 的样本 ini 对我来说没问题。 - Devesh Kumar Singh
1
我猜测,由于您为配置文件提供了相对路径,因此您没有读取到预期的配置文件。您应该添加一个带有 print(os.getcwd()) 的调试打印。 - Serge Ballesta
你的Python文件和config.ini文件是否在同一路径下?如果不是,请将config.ini文件放置在Python文件的路径下,然后运行脚本。这样应该可以正常工作。 - Nithin
是的,例如如果我提供了错误的路径,例如config.read('/xyz/config.ini'),那么我会收到错误信息configparser.NoSectionError: No section: 'ABC',所以请提供正确的config.ini路径,然后你就可以正常运行了!我在下面的回答中尝试了这个方法,它有效!请查看一下!@pbch - Devesh Kumar Singh
2个回答

8
你的代码完全没问题。
这一行:
config.read('config.ini')

尝试从运行的.py文件所在的目录中读取文件。因此您有三个选择:

  1. 将config.ini文件移到与.py文件相邻的位置
  2. 在读取文件时使用正确的相对路径
  3. 在读取文件时使用绝对路径(基于可移植性原因不推荐)

感谢您的帮助,解决了问题,这是由于config.ini指向错误位置引起的。 - Pbch
@Pbch 很高兴我能帮上忙 :) - ruohola
嗨@Pbch,我看到你接受了我的答案,然后又取消了,我的答案有什么问题吗? - Devesh Kumar Singh

3
似乎问题在于找不到正确位置的config.ini文件,你可以通过使用os.getcwd来避免这个问题。最初的回答。
import configparser
import os
config = configparser.ConfigParser()

#Get the absolute path of ini file by doing os.getcwd() and joining it to config.ini
ini_path = os.path.join(os.getcwd(),'config.ini')
config.read(ini_path)
ch0 = config.get('ABC','ch0')
print(ch0)
#"C:/Users/utility/ABC-ch0.txt"

感谢您的帮助,解决了问题。原因是config.ini指向错误的位置。 - Pbch
没关系!我看到你接受了我的答案,然后又取消了 @Pbch 我的答案有什么问题吗? - Devesh Kumar Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接