我需要替换文件名中的特殊字符。我正在尝试翻译,但它不是很好的工作,我希望你有一个想法这样做。它是为了制作一个清晰的播放列表,我的车里有一个糟糕的mp3播放器,它不能用于修改omlaute oder的专用。
到目前为止我的代码
# -*- 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'编解码器无法编码位置37中的字符u'\ xfc':序数不在范围内(128) 如果我尝试在id3title上使用translate,我会得到 TypeError:期望一个字符缓冲区对象
答案 0 :(得分:1)
如果我需要摆脱非ascii字符,我经常使用:
>>> unicodedata.normalize("NFKD", u"spëcïälchärs").encode('ascii', 'ignore')
'specialchars'
尝试将字符转换为其标准化unicode分解的ascii部分。 不好的是,它抛弃了它不知道的一切,并且不够聪明地音译变音符号(对于ue,ae等)。
但它可能会帮助你至少播放那些mp3。
当然,你可以先自己做str.translate
,并将结果包装在其中,以消除仍然留下的每个非ascii字符。事实上,如果您的replace
是正确的,这将解决您的问题。不过,我建议您查看str.translate
和str.maketrans
。