您可以使用str.translate:
import collections
import string
table = collections.defaultdict(lambda: None)
table.update({
ord('é'):'e',
ord('ô'):'o',
ord(' '):' ',
ord('\N{NO-BREAK SPACE}'): ' ',
ord('\N{EN SPACE}'): ' ',
ord('\N{EM SPACE}'): ' ',
ord('\N{THREE-PER-EM SPACE}'): ' ',
ord('\N{FOUR-PER-EM SPACE}'): ' ',
ord('\N{SIX-PER-EM SPACE}'): ' ',
ord('\N{FIGURE SPACE}'): ' ',
ord('\N{PUNCTUATION SPACE}'): ' ',
ord('\N{THIN SPACE}'): ' ',
ord('\N{HAIR SPACE}'): ' ',
ord('\N{ZERO WIDTH SPACE}'): ' ',
ord('\N{NARROW NO-BREAK SPACE}'): ' ',
ord('\N{MEDIUM MATHEMATICAL SPACE}'): ' ',
ord('\N{IDEOGRAPHIC SPACE}'): ' ',
ord('\N{IDEOGRAPHIC HALF FILL SPACE}'): ' ',
ord('\N{ZERO WIDTH NO-BREAK SPACE}'): ' ',
ord('\N{TAG SPACE}'): ' ',
})
table.update(dict(zip(map(ord,string.ascii_uppercase), string.ascii_lowercase)))
table.update(dict(zip(map(ord,string.ascii_lowercase), string.ascii_lowercase)))
table.update(dict(zip(map(ord,string.digits), string.digits)))
print('123 fôé BAR҉'.translate(table,))
产量
123 foe bar
不利的一面是,您必须列出所有要翻译的特殊重音字符。@gnibbler 的方法需要更少的编码。
从好的方面来说,该str.translate
方法应该相当快,并且一旦table
设置好,它就可以在一个函数调用中处理您的所有要求(缩小、删除和删除重音符号)。
顺便说一句,200K 字符的文件不是很大。因此,将整个文件读入单个str
,然后在一个函数调用中翻译它会更有效。