我正在尝试使用PyCharm和Python 3.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.py:
def readConfig():
config = configparser.ConfigParser()
with codecs.open('RecorderMover.config.ini', 'r', encoding='utf-8') as f:
config.read(f)
config = config['RecorderMoverConfiguration']
sourcePath = config['SourcePath']
destPaths = config['DestinationPaths']
filesToExclude = config['FilesToExclude']
RecorderMover.config.ini:
[RecorderMoverConfiguration]
SourcePath=I:\VOICE\A
DestinationPaths=D:\RoseBackup,E:\רוזה
FilesToExclude=20.08.12.mp3
我做错了什么?
答案 0 :(得分:1)
您需要在.read_file()
实例上使用config
方法:
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
,Microsoft偏离UTF-8标准),则使用不添加该字符的工具创建文件(例如 not 记事本),使用utf_8_sig
编解码器打开它:
config = configparser.ConfigParser()
config.read('RecorderMover.config.ini', encoding='utf-8-sig')