Я загружаю путь к папке из файла config.yml.Имя примера: C:/Users/Name/Desktop/ü
, которое содержит символ utf-8.Когда я загружаю этот путь, используя yaml.load(config)
(я использую ruamel.yaml), а затем использую загруженное значение, чтобы проверить, существует ли этот каталог с os.path.isdir()
, я всегда получаю "False", даже если файл существует.(в Windows)
Однако, когда я пытаюсь проверить, существует ли файл с жестко закодированной строкой, такой как root_path = 'C:/Users/Name/Desktop/ü'
, я получаю "True".
Я сбросил данные (python dict) в файл конфигурации, используя yaml.dump ():
with open(path_to_config, 'w', encoding='utf-8') as config:
yaml.dump(data, config)
, который выглядит так при открытии в текстовом редакторе:
destination:
root_path: C:/Users/Name/Desktop/ü
При печати жестко запрограммированного значения на консоль отображается:
C:/Users/Name/Desktop/▒
или при использовании print(root_path.encode('utf-8'))
:
b'C:/Users/Name/Desktop/\xc3\xbc
.
Для извлечения root_pathиз файла конфигурации, который я использую:
with open('config.yaml') as cfg:
user_data = yaml.load(cfg)
root_path = user_data['destination']['root_path']
Когда я печатаю путь root_path, полученный из файла config.yml, вместо этого я получаю:
C:/Users/Name/Desktop/ü
и с использованием print(root_path.encode('utf-8'))
:
b'C:/Users/Name/Desktop/\xc3\x83\xc2\xbc'
Откуда эта разница и как я могу преобразовать значение, загруженное из файла конфигурации, чтобы os.path.isdir () мог найти файл?