SORU
15 EKİM 2010, Cuma


Python ile bir dize belirli karakterleri kaldırın

Bir dize python kullanarak özel karakterleri kaldırmak için çalışıyorum. Bu şu anda kullanıyorum kodudur. Ne yazık ki dize için bir şey yapmak gibi görünüyor.

for char in line:
    if char in " ?.!/;:":
        line.replace(char,'')

Bunu nasıl düzgün yapabilirim?

CEVAP
15 EKİM 2010, Cuma


Python dizelerideğişmez(değiştirilemez). Bu nedenle, line.replace(...) etkisi sadece yeni bir dize oluşturmak için, yerine eski bir değişiyor. Gerekiryeniden bağlayınbu değişkenin yeni değeri, o karakter kaldırılmış almak için (ata) line.

Ayrıca, sizin yaptığınız şekilde biraz yavaş, nispeten olacak. Biraz da iki kat-iç içe geçmiş bir yapı görecek olan deneyimli pythonators, kafasını karıştırabilir ve bir şey daha karmaşık oluyor bir an için düşünün.

str.translate kullanabilirsiniz:

line = line.translate(None, '!@#$')

sadece Python ve daha yeni Python 2 2.6.çalışır x sürümleri * —

ya re.sub ile normal ifade değiştirme

import re
line = re.sub('[!@#$]', '', line)

Karakterler ayraç olarak kabul ederkarakter sınıfı. Sınıf sub ikinci parametre ile değiştirilir hangi line herhangi bir karakter: boş bir dize.


daha önce Piton ile uyumluluk için*, oluşturabilirsiniz bir "boş" masa None yerine geçmek çeviri:

import string
line = line.translate(string.maketrans('', ''), '!@#$')

Burada string.maketrans bir oluşturmak için kullanılırçeviri tablosusadece bir dizi sıralı değerler ile 255 arasında karakter içeren 0.,

Python 3 kullanarak henüz başlamadım, Python 3 için/bu tercüme nasıl emin değilim.


Kevpie cevapları üzerinde comment bahseder gibi, ve documentation for str.translate şeyler de belirtildiği gibi farklı Unicode dizeleri ile çalışır.

Bir unicode dize translate yöntemin çağrılması, yukarıda verdiğimiz ikinci parametre olarak geçirmek. Ayrıca ilk parametre olarak None geçebilir mi, ya da string.maketrans hatta çeviri bir tablo. Bunun yerine, tek parametre olarak bir sözlük geçirir. Bu sözlük haritalarsıralı değerlerkarakter (yani sonuç arama ord bunları) sıra değerleri karakterleri değiştirmek gerekir onları, ya da işe yaramayacak bizi— None gösteren olmalılar silinmiş.

Bir Unicode dize üzerinde dans yapmak için bir şey gibi

translation_table = dict.fromkeys(map(ord, '!@#$'), None)
unicode_line = unicode_line.translate(translation_table)

Burada dict.fromkeys map özlü bir sözlük içeren oluşturmak için kullanılır

{ord('!'): None, ord('@'): None, ...}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Artorius FullPower

    Artorius Ful

    29 Temmuz 2007
  • talkandroid

    talkandroid

    27 Mayıs 2010
  • TVNorge

    TVNorge

    5 EKİM 2006