python: 替换字符串中的特殊字符
我从歌曲的MP3标签中读取艺术家的名字,然后根据这个名字创建一个文件夹。现在遇到的问题是,当名字里有特殊字符,比如'AC\DC'时,就会出问题。所以我写了这段代码来处理这个情况。
def replace_all(text):
print "replace_all"
dictionary = {'\\':"", '?':"", '/':"", '...':"", ':':"", chr(148):"o"}
for i, j in dictionary.iteritems():
text = text.replace(i,j)
return text
现在我碰到的另一个问题是,如何处理像Motorhead或Blue Oyster Cult中的带变音符号的字母,比如带两个点的o。
正如你所看到的,我尝试在字典的末尾添加带变音符号的o的ASCII字符串版本,但这失败了,出现了
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 4: ordinal not in range(128)
2 个回答
0
我建议你在输入文本和替换的字符中都使用unicode。你举的例子中,chr(148)
显然不是一个unicode符号。
3
我找到了这段代码,虽然我不太明白它的意思。
def strip_accents(s):
return ''.join((c for c in unicodedata.normalize('NFD', s) if unicodedata.category(c) != 'Mn'))
这段代码让我可以去掉建议的目录或文件名中的重音符号。