0

我需要替换文件名中的特殊字符。我现在正在尝试使用翻译,但它的效果并不好,我希望你有一个想法来做到这一点。为了制作一个清晰的播放列表,我在我的车里放了一个糟糕的 mp3 播放器,它不能做 umlaute oder specialchars。

到目前为止我的代码

# -*- coding: utf-8 -*-
import os
import sys
import id3reader
pfad = os.path.dirname(sys.argv[1])+"/"
ordner = ""

table = {
      0xe9: u'e',
      0xe4: u'ae',
      ord(u'ö'): u'oe',
      ord(u'ü'): u'ue',
      ord(u'ß'): u'ss',
      0xe1: u'ss',
      0xfc: u'ue',
    }
def replace(s):
return ''.join(c for c in s if (c.isalpha() or c == " " or c =="-") )
fobj_in = open(sys.argv[1])
fobj_out = open(sys.argv[1]+".new","w")

for line in fobj_in:
if (line.rstrip()[0:1]=="#" or line.rstrip()[0:1] ==" "):
    print line.rstrip()[0:1]
else:
    datei= pfad+line.rstrip()
    #print datei
    id3info = id3reader.Reader(datei)
    dateiname= str(id3info.getValue('performer'))+" - "+ str(id3info.getValue('title'))
    #print dateiname
    arrPfad = line.split('/')

    dateiname = replace(dateiname[0:60])
    print dateiname
#   dateiname = dateiname.translate(table)+".mp3"
    ordner = arrPfad[0]+"/"+dateiname
#   os.rename(datei,pfad+ordner)
    fobj_out.write(ordner+"\r\n")
fobj_in.close()

我收到此错误:UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 37: ordinal not in range( 128 )目的

4

1 回答 1

1

如果我需要摆脱非ASCII字符,我经常使用:

>>> unicodedata.normalize("NFKD", u"spëcïälchärs").encode('ascii', 'ignore')
'specialchars'

它试图将字符转换为其规范化 unicode 分解的 ascii 部分。不好的是,它会丢弃所有它不知道的东西,并且不够聪明,无法音译变音符号(如 ue、ae 等)。

但它至少可以帮助您播放这些 mp3。

当然,您可以先自己做str.translate,然后将结果包装在其中,以消除所有剩余的非 ascii 字符。事实上,如果你replace是正确的,这将解决你的问题。不过,我建议您看一下str.translateand str.maketrans

于 2012-05-14T21:37:09.133 回答