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

  • bigky226

    bigky226

    11 HAZİRAN 2006
  • MrExcite96

    MrExcite96

    17 ŞUBAT 2011
  • Samantha Crain

    Samantha Cra

    30 EKİM 2008