Python 使用configparser从utf-8.ini文件读取配置时发生KeyError
我正在尝试使用PyCharm和Python3.3编写一个python程序。 我想做的是,我的程序将文件从一个目录复制到一个或多个文件夹(取决于配置文件) 由于我试图复制到文件中的一些目录是希伯来文的,所以ini文件是utf-8 但是,当我从该文件读取配置时,我得到的是:Python 使用configparser从utf-8.ini文件读取配置时发生KeyError,python,utf-8,ini,configparser,Python,Utf 8,Ini,Configparser,我正在尝试使用PyCharm和Python3.3编写一个python程序。 我想做的是,我的程序将文件从一个目录复制到一个或多个文件夹(取决于配置文件) 由于我试图复制到文件中的一些目录是希伯来文的,所以ini文件是utf-8 但是,当我从该文件读取配置时,我得到的是: C:\Python33\python.exe C:/Users/Username/PycharmProjects/RecorderMover/RecorderMover.py Traceback (most recent cal
C:\Python33\python.exe C:/Users/Username/PycharmProjects/RecorderMover/RecorderMover.py
Traceback (most recent call last):
File "C:/Users/Username/PycharmProjects/RecorderMover/RecorderMover.py", line 77, in <module>
sourcePath, destPaths, filesToExclude = readConfig()
File "C:/Users/Username/PycharmProjects/RecorderMover/RecorderMover.py", line 62, in readConfig
config = config['RecorderMoverConfiguration']
File "C:\Python33\lib\configparser.py", line 942, in __getitem__
raise KeyError(key)
KeyError: 'RecorderMoverConfiguration'
RecorderMover.config.ini:
[RecorderMoverConfiguration]
SourcePath=I:\VOICE\A
DestinationPaths=D:\RoseBackup,E:\רוזה
FilesToExclude=20.08.12.mp3
我做错了什么?您需要在
config
实例上使用.read\u file()
方法:
with open('RecorderMover.config.ini', 'r', encoding='utf-8') as f:
config.read_file(f)
.read()
方法将f
视为一个文件名序列,由于没有一行可以解释为文件名,因此配置最终为空
或者,将文件名和编码传递到.read()
,而不用自己打开文件:
config = configparser.ConfigParser()
config.read('RecorderMover.config.ini', encoding='utf-8')
如果输入文件包含UTF-8 BOM(\ufeff
,一种来自UTF-8标准的Microsoft devation),请使用不添加该字符的工具(例如,非记事本)创建该文件,使用UTF\u 8\u sig
编解码器打开该文件:
config = configparser.ConfigParser()
config.read('RecorderMover.config.ini', encoding='utf-8-sig')
@Ghost93:您使用添加UTF-8 BOM的编辑器创建了该文件。这个字符在UTF-8文件中是多余的,应该删除,真的。非常感谢您的帮助!成功了!如果有人想知道BOM是什么-
config = configparser.ConfigParser()
config.read('RecorderMover.config.ini', encoding='utf-8-sig')