python: 替换字符串中的特殊字符

1 投票
2 回答
5282 浏览
提问于 2025-04-16 11:26

我从歌曲的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'))

这段代码让我可以去掉建议的目录或文件名中的重音符号。

撰写回答