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

  • 3dmmfavs

    3dmmfavs

    29 Kasım 2009
  • Curso Online Gratuito

    Curso Online

    4 Aralık 2011
  • Snazzy Labs

    Snazzy Labs

    9 Aralık 2008