Я пытаюсь изучить Python и не мог выяснить, как перевести следующий сценарий жемчуга в Python:
#!/usr/bin/perl -w
use open qw(:std :utf8);
while(<>) {
s/\x{00E4}/ae/;
s/\x{00F6}/oe/;
s/\x{00FC}/ue/;
print;
}
Сценарий просто изменяется, unicode умляуты к альтернативному ASCII производят. (Таким образом, полный вывод находится в ASCII), я был бы благодарен за любые подсказки.Спасибо!
fileinput
для перебора стандартного ввода или списка файлов, translate
translit.py
, это будет выглядеть так:
#!/usr/bin/env python2.6
# -*- coding: utf-8 -*-
import fileinput
table = {
0xe4: u'ae',
ord(u'ö'): u'oe',
ord(u'ü'): u'ue',
ord(u'ß'): None,
}
for line in fileinput.input():
s = line.decode('utf8')
print s.translate(table),
И вы можете использовать его так:
$ cat utf8.txt
sömé täßt
sömé täßt
sömé täßt
$ ./translit.py utf8.txt
soemé taet
soemé taet
soemé taet
Если вы используете Python 3, строки по умолчанию являются Unicode, и вам не нужно кодировать их, если они содержат символы, отличные от ASCII, или даже нелатинские символы. Таким образом, решение будет выглядеть следующим образом:
line = 'Verhältnismäßigkeit, Möglichkeit'
table = {
ord('ä'): 'ae',
ord('ö'): 'oe',
ord('ü'): 'ue',
ord('ß'): 'ss',
}
line.translate(table)
>>> 'Verhaeltnismaessigkeit, Moeglichkeit'
Для преобразования в ASCII вы можете попробовать ASCII, черт возьми или этот рецепт , который сводится к :
>>> title = u"Klüft skräms inför på fédéral électoral große"
>>> import unicodedata
>>> unicodedata.normalize('NFKD', title).encode('ascii','ignore')
'Kluft skrams infor pa federal electoral groe'