String Yapısı ve Python
Metin bilgisini depolayabilen Python str
yani kelime dizisi string
yapısına bakalım. Bu tip temel olarak değiştirilemez (immutable) bir
tiptir, yani bir kere bir kelime, cümle bir obje haline geldiğine
içeriği değiştirilemez, ona yapılan ekler, işlemler yeni bir str
yaratacaktır.
String Birleştirmek
Python ile String parcalarini biraraya getirmenin birkac yolu var. Bunlardan en basiti ve ilk akla geleni + isaretini kullanmaktir:
s1 = "aaa" + "-" + "bbb" + "-" + "ccc"
print (s1)
aaa-bbb-ccc
Diğer bir yöntem yerine geçen String (subsitution) yöntemi. Bu yöntem
aslında C/++ dilinde bilinen sprintf
mantığına benziyor. Format
belirleyen bir kısım var, bir de formatın tanımladığı yerlere yeni
değerler parametre olarak geçilen değerler var, ve bu değerler ile
yeni bir String oluşturuluyor. Örnek:
s2 = "%s-%s-%s" % ("aaa","bbb","ccc")
print (s2)
aaa-bbb-ccc
Bu kullanımın birkaç avantajı var, String tipini temsil eden %s
yerine diğer tipler de kullanılabilir, mesela float'ları temsil eden
%f
. O zaman hem String birleştirme hem de tiplere göre formatlama
aynı anda yapılabilecektir.
Örnek
s3 = "Burada bir float deger var: %f" % (3.43455)
print (s3)
Burada bir float deger var: 3.434550
%f
daha sofistike şekilde de kullanılabilir. Mesela: s = "Burada
bir float değer var: %3.2f" % (3.43455)
. Bu formatlamaya göre float
değerini noktadan sonra sadece 2 basamak olacak şekilde ayarladık. O
zaman sonuç: Burada bir float değer var: 3.43
olacaktır
Eşitlik
Bir str
diğerine ne zaman eşittir? Eğer içerikleri aynı ise,
s5 = "bir kelime"
s6 = "bir kelime"
print (s5 == s6)
True
print (s5 == "baska bir kelime")
False
Bazen pür eşitlik aşırı olabilir, bir kelimeyi diğeri içinde varsa eşit kabul
etmek için in
kullanılabilir,
print ("bir" in s5)
True
Bir Dizin Olarak String
Fakat sonuçta str
tipinin bir harf dizini olduğunu unutmayalım. Eğer bu dizini
aynen bir listeyi gezer gibi gezmek istersek bunu yapabiliriz,
for s in s5: print (s)
b
i
r
k
e
l
i
m
e
Ve doğal olarak indis bazlı erişim de işleyecektir,
s5[4]
Out[1]: 'k'
s5[-1]
Out[1]: 'e'
Harf Bloklarını Değiştirmek
Bu işlem için replace
çağrısı yeterli,
s4 = "bir berber bir berbere ne demis"
s4.replace("ne demis","gel beraber berber dukkan acalim demis")
Out[1]: 'bir berber bir berbere gel beraber berber dukkan acalim demis'
Harf(lerin) Yerini Bulmak
s4.find("berber")
Out[1]: 4
Bu çağrı aranan metnin ilk görüldüğü yerin indisini döndürdü. Diğer
berber
kelimelerini bulmak için find
çağrısını bir aralık üzerinde
işletmek mümkündür, yani başlangıç, bitiş değerleri verebiliriz,
üstteki örnekte ilk bulunan kısmı atlayarak oradan itibaren arama
yaparsak, bir sonraki uyumun yeri döndürülür,
s4.find("berber",5,len(s4))
Out[1]: 15
Aslında sadece başlangıç değeri verilebilirdi, bitiş verilmezse kelime sonu kabul edilir,
s4.find("berber",5)
Out[1]: 15
ASCII Haline Getirmek
Her dilden farklı karakterleri ascii haline çevirmek için, unidecode
paketi var,
from unidecode import unidecode
print (unidecode(u"çagrı"))
cagri
olacak, yani TR karakterleri İngilizce harflerden en yakın olanlarına tercüme edilecek. Bu niye yapılır? Belki metin arama yaparken lazım olabilir.
Yukarı