@Vlad_beg

Как правильно преобразовать название файла к utf-8?

Написал простенький скрипт, который сохраняет все названия файлов в папке в текстовый файл, но скрипт выдает ошибку, поскольку сталкивается с файлами у которых в названии присутствует кириллица. Как правильно использовать "encode" в данном случае, чтобы выполнялось сохранение.

import os
import sys

path = "C:\\Users\\User\\Desktop"
file = open('testfile.txt', 'w')

for dirpath, dirnames, filenames in os.walk('C:\\Users\\User\\Documents\\Folder'):
    print('Current path: ', dirpath)
    print('Directories: ', dirnames)
    for fname in filenames:
        line = fname.encode('utf-8')
        file.write(line+ "\n")


Ошибка

Traceback (most recent call last):
File "c:\Users\User\Desktop\Folder Compare.py", line 12, in
file.write(fname + "\n")
File "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 6-11: character maps to
  • Вопрос задан
  • 294 просмотра
Решения вопроса 1
@Sovetnikov
технический директор pulsprodaj.ru
У вас файл открывается для записи с кодировкой не UTF8 и при записи происходит попытка конвертировать UTF8 символы в cp1252 (почему не 1251 странно...).
Вот работающий код, кодировка файла при открытии указывается
import os

path = "Q:\\Temp"
file = open('testfile.txt', 'w', encoding='utf8')

for dirpath, dirnames, filenames in os.walk(path):
    print('Current path: ', dirpath)
    print('Directories: ', dirnames)
    for fname in filenames:
        file.write(fname + os.linesep)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы