SORU
18 EYLÜL 2008, PERŞEMBE


Sıyırma python ile bir dizeden yazdırılabilir karakterleri olmayan

Çalıştırmak için kullanıyorum

$s =~ s/[^[:print:]]//g;

Perl olmayan yazdırılabilir karakterleri kurtulmak için.

Python için POSIX düzenli sınıfları yok ve yazamıyorum [:print:] sahip olmak istiyorum ne demek. Eğer bir karakter yazdırılabilir olup olmadığını tespit etmek için Python ya da herhangi bir şekilde biliyorum.

Siz ne yapardınız?

EDİT: Unicode karakterleri de destekler. Bu dize.yazdırılabilir şekilde mutlu onlara çıktı dışarı şerit olacak. küfürler.ascıı.isprint herhangi bir unicode karakter için yanlış döndürür.

CEVAP
18 EYLÜL 2008, PERŞEMBE


Dizeleri üzerinden yineleme ne yazık ki Python oldukça yavaştır. Düzenli ifadeler bu tür bir şey için bir büyüklük sırası üzerinde daha hızlıdır. Sadece karakter sınıfı kendiniz inşa etmek zorunda.unicodedataBu modül, özellikle de oldukça yararlı olurunicodedata.() kategoriişlevi. Kategorilerin açıklamaları Unicode Character Database bkz.

import unicodedata, re

all_chars = (unichr(i) for i in xrange(0x110000))
control_chars = ''.join(c for c in all_chars if unicodedata.category(c) == 'Cc')
# or equivalently and much more efficiently
control_chars = ''.join(map(unichr, range(0,32)   range(127,160)))

control_char_re = re.compile('[%s]' % re.escape(control_chars))

def remove_control_chars(s):
    return control_char_re.sub('', s)

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • discokatze

    discokatze

    23 EYLÜL 2009
  • Kai Moosmann

    Kai Moosmann

    5 Temmuz 2006
  • stewmurray47

    stewmurray47

    1 Kasım 2006