unicodedata.normalize缺少一个字符进行转换

时间:2019-06-25 21:22:33

标签: python unicode unicode-normalization

我正在尝试使用以下脚本重命名文件,但是在捕获以下“ Do n’t”(以“ Do n't”结尾)时遇到了问题。关于如何执行此操作的任何想法?

def remove_accents(s): 
    nkfd_form = unicodedata.normalize('NFKD', s) 
    return u''.join([c for c in nkfd_form if not unicodedata.combining(c)])

for fname in glob.glob("**/*.mp3", recursive=True):
    new_fname = remove_accents(fname)
    if new_fname != fname:
        try:
            print ('renaming non-ascii filename to', new_fname)
            os.rename(fname, new_fname)
        except Exception as e:
            print (e)

1 个答案:

答案 0 :(得分:3)

这项工作使用了错误的工具-unicodedata.normalize根本不是要去除口音。

要向下转换为ascii,请查看unidecode

>>> from unidecode import unidecode
>>> unidecode("Don’t")
"Don't"