Переименование файлов: UnicodeEncodeError: кодек «utf-8» не может кодировать символ «\ udca9» - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь переименовать файлы, используя скрипт Python 3:

#!/usr/bin/env python3
import os
import unicodedata

def convertString(s):
    return unicodedata.normalize('NFKD', s).encode('ASCII', 'ignore').decode('utf-8')

def renameFile(old,new):
    os.rename(old, new)

dir = '/media/alpha/directory/docs/'

for root, dirs, files in os.walk(dir):
    for d in dirs:
        normal = convertString(d)
        if normal != d:
            renameFile(os.path.join(root, d), os.path.join(root, normal))

    for file in files:
        normal = convertString(file)

        if normal != file:
            renameFile(os.path.join(root, file), os.path.join(root, normal))

В какой-то момент встречается строка, которая выдает эту ошибку:

Traceback (most recent call last):
  File "/home/alpha/PycharmProjects/rename/findInvalidEncoding.py", line 22, in <module>
    renameFile(os.path.join(root, d), os.path.join(root, normal))
  File "/home/alpha/PycharmProjects/rename/findInvalidEncoding.py", line 10, in renameFile
    print(old)
UnicodeEncodeError: 'utf-8' codec can't encode character '\udca9' in position 60: surrogates not allowed

По большей частисимволы с умлаутами, каретками и т. д. заменяются, как и ожидалось, но очевидно, что есть некоторые проблемы, в частности, с переменной file в строке renameFile(os.path.join(root, file), os.path.join(root, normal))

Как я могу решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...