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

  • David MeShow

    David MeShow

    10 EKİM 2006
  • DrePwn

    DrePwn

    22 Temmuz 2011
  • The Pet Collective

    The Pet Coll

    5 Ocak 2012