Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用configparser从utf-8.ini文件读取配置时发生KeyError_Python_Utf 8_Ini_Configparser - Fatal编程技术网

Python 使用configparser从utf-8.ini文件读取配置时发生KeyError

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

我正在尝试使用PyCharm和Python3.3编写一个python程序。 我想做的是,我的程序将文件从一个目录复制到一个或多个文件夹(取决于配置文件)

由于我试图复制到文件中的一些目录是希伯来文的,所以ini文件是utf-8

但是,当我从该文件读取配置时,我得到的是:

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')