Я пытаюсь написать программу на Python с использованием PyCharm и Python 3.3. Я хочу, чтобы моя программа копировала файлы из одного каталога в одну или несколько папок (в зависимости от файла конфигурации).
Поскольку некоторые каталоги, которые я пытаюсь скопировать в файлы, написаны на иврите, это файл 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
Что я делаю не так?
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 (\ufeff
, отклонение Microsoft от стандарта UTF-8), либо создайте файл, используя инструмент, который не добавляет этот символ (например, not Блокнот), откройте его с помощью кодека utf_8_sig
:
config = configparser.ConfigParser()
config.read('RecorderMover.config.ini', encoding='utf-8-sig')
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.