SORU
24 AĞUSTOS 2009, PAZARTESİ


Nasıl str alabilirim.Unicode dizeleri ile iş çevirmek?

Aşağıdaki kodu var:

import string
def translate_non_alphanumerics(to_translate, translate_to='_'):
    not_letters_or_digits = u'!"#%\'()* ,-./:;<=>?@[\]^_`{|}~'
    translate_table = string.maketrans(not_letters_or_digits,
                                       translate_to
                                         *len(not_letters_or_digits))
    return to_translate.translate(translate_table)

Unicode olmayan dizeleri: için harika çalışıyor

>>> translate_non_alphanumerics('<foo>!')
'_foo__'

Ama unicode için başarısız dizeleri:

>>> translate_non_alphanumerics(u'<foo>!')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in translate_non_alphanumerics
TypeError: character mapping must return integer, None or unicode

"Str Python 2.6.2 docs. "Unicode nesneleri paragrafın herhangi bir anlam veremiyorum() translate yöntemi.

Nasıl Unicode dizeleri için bu işi yapabilirim?

CEVAP
24 AĞUSTOS 2009, PAZARTESİ


Tercüme Unicode sürümü Unicode Unicode sıra sayıları sıra sayıları ord Tek bir karakter için alabilirsiniz) bir eşleme gerektirir. Eğer karakter silmek istiyorsanız, None göster.

Fonksiyon bir dict çevirmek için ne istediğinizi sıra her karakterin sıralı eşleme oluşturmak için değiştirdim:

def translate_non_alphanumerics(to_translate, translate_to=u'_'):
    not_letters_or_digits = u'!"#%\'()* ,-./:;<=>?@[\]^_`{|}~'
    translate_table = dict((ord(char), translate_to) for char in not_letters_or_digits)
    return to_translate.translate(translate_table)

>>> translate_non_alphanumerics(u'<foo>!')
u'_foo__'

düzenleme:Çeviri eşleme ya da başka bir Unicode sıra, bir Unicode dize, ya da Hiçbiri (silmek) için Unicode sıra (ord) harita gerekir çıkıyor. Böylece translate_to varsayılan değer bir Unicode edebi olması için değiştirdim. Örneğin:

>>> translate_non_alphanumerics(u'<foo>!', u'bad')
u'badfoobadbad'

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Blunty

    Blunty

    13 Mart 2006
  • GALERNAYA20

    GALERNAYA20

    19 NİSAN 2011
  • JorteexHD

    JorteexHD

    20 NİSAN 2012