Я пытаюсь переименовать файлы, используя скрипт 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))
Как я могу решить эту проблему?