我正在尝试使用SafeConfigParser读取python 3.7中的配置文件。我试过给出完整的文件名(带文件位置),只给出文件名(不带文件位置的),在SafeConfigParser中使用readfp函数,只使用configparser而不是SafeConfigParser,但都不起作用。我100%确信至少正在读取正确的文件。
这是我的python代码:
from configparser import SafeConfigParser
import os
def main():
filename = "C:/Users/Umer Sherdil Paracha/Desktop/distutils.cfg"
if os.path.isfile(filename):
parser = SafeConfigParser()
parser.read(filename)
print(parser.sections())
screen_width = parser.getint('graphics','width')
screen_height = parser.getint('graphics','height')
else:
print("Config file not found")
if __name__=="__main__":
main()
这是我的cfg文件:
[GRAPHICS]
height = 600
width = 800
我完全陷入了这个愚蠢的问题。如能在这方面提供任何帮助,我们将不胜感激。非常感谢。
很难说,但我猜你的文件名字符串有问题。
先试试这段调试代码:
filename = "C:/Users/Umer Sherdil Paracha/Desktop/distutils.cfg"
with open(filename) as file:
print("Successfully got to this line!")
我猜这会给你一个找不到文件的错误。这可能有几个原因(尽管你总是可以通过右键点击文件并打开属性来仔细检查你是否有正确的路径):
- 您使用的是unix风格的斜杠。Windows通常使用反斜杠()
- 当您开始在字符串中使用反斜杠时,python可能会混淆,因为反斜杠也用于转义特殊字符。通过在起始引号前添加一个r来告诉python这是一个原始字符串:
r"I will not escape the backslashes"
我认为你的文件名变量应该是这样的:
filename = r"C:UsersUmer Sherdil ParachaDesktopdistutils.cfg"
如果您在文件字符串中同时进行这两项更改,我怀疑上面的测试代码会起作用,在进行这些更改后,您的真实代码也会起作用。
一旦您能够成功打开文件,请记住python始终区分大小写,因此您必须更新以下两行代码,以反映.cfg文件中使用的大小写:
screen_width = parser.getint('GRAPHICS','width')
screen_height = parser.getint('GRAPHICS','height')
使用Windows ini文件时使用
r'pathname'
以识别文件。
r"pathname"
也可能起作用。在我的例子中,如果没有ConfigParser.read上的"r"Python没有错误,它只是找不到部分。