str Sınıfı ve İşlemleri - 2
9101
Şimdi de str sınıfının metotları üzerinde duracağız.
Önemli
Şimdi str sınıfının
değiştirilemez olduğunu söylemiştik. Burada metotlar sanki str nesnesinin
içeriğini değiştiriyor gibi gözükse de aslında mevcut nesneyi değiştirmezler,
bize değiştirilmiş yeni yazı verirler. İlerideki cümlelerde str değişiyormuş
gibi gözükse de aslında yeni nesneler elde edilmektedir.
capitalize() Metodu
Bu metod bir parametre almaz, ilk harfi büyük yapıp bize geri verir.
>>> s = 'alper'
>>> id(s)
547866001712
>>> s = s.capitalize()
>>> s
'Alper'
>>> id(s)
547865992240
Görüldüğü gibi farklı bir nesne elde etmiş olduk.
title() Metodu
Bu metot da yazının tüm sözcüklerinin ilk harfini büyütür, sadece ilk kelimenin değil.
>>> 'bu bir başlıktır'.title()
'Bu Bir Başlıktır'
center() Metodu
Bu metod, yazıyı belli bir genişlikte ortalar. Birinci parametre döndürülecek
yazı uzunluğunu belirtir. Yani sonuçta çıkan yazı bu uzunlukta olacaktır. Eğer
bu şekilde tek argümanlar çağırırsak yazının sağı ve solu boşluk karakteri
ile doldurulur. Ama ikinci argüman da geçebiliriz. Bu ikinci argüman girilirse
tek karakterli bir str olmalıdır. Eğer bu argüman verilirse sağ ve sol
boşluk karakteri ile değil, bu karakterler doldurulur.
Eğer sağa ve sola konması gereken karakter sayısının toplamı tek ise hangi tarafa fazla karakter koyulacağı Python Standard Library Referenceta belirtilmemiştir.
Örnekler:
>>> 'alper'.center(10)
' alper '
>>> 'alper'.center(10,'*')
'**alper***'
>>> 'alper'.center(10,'**')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: The fill character must be exactly one character long
find() Metodu
9187
Yazı içerisinde bir yazıyı aramak için kullanılır. Eğer yazı bulunursa bize
ilk bulunduğu yerin indeks numarasını döner. Eğer bulunamazsa -1 değerini
döner.
>>> s = 'ankara'
>>> s.find('k')
2
>>> s.find('nk')
1
>>> s.find('b')
-1
find() iki argüman da alabilir, ikinci argüman verilirse arama o indekseten
başlatılır. Üç argüman da verirsek aramanın bitirileceği indeks söylenir ama
aramaya bu indeks dahil edilmez.
Örnekler:
>>> s = 'bugün hava çok güzel, evet evet hava çok güzel'
>>> s.find('hava')
6
>>> s.find('hava', 10)
32
>>> s.find('z', 10)
17
>>> s.find('z', 10, 15)
-1
rfind() Metodu
Bu da find() gibidir ama aramayı tersten yapar ya da find()ın bulunan
son indeks numarasını veren versiyonu gibi düşünülebilir. Bu da tek, çift
ya da üç argümanla çağırılabilir.
>>> s = 'adıyaman'
>>> s.rfind('a', 1, 6)
4
>>> s.rfind('a', 1)
6
>>> s.rfind('a')
6
Şimdi biraz daha gerçekçi bir örnek yapalım. Burada bir yol ifadesindeki dosya
adı elde edilmiştir. Eğer path \ yoksa rfind(), -1 döneceği için
tüm yol ifadesi elde edilir.
>>> path = r'c:\windows\system\test.dll'
>>> index = path.rfind('\\')
>>> fname = path[index + 1:]
>>> fname
'test.dll'
index() ve rindex() Metodları
Bu metodlar find() ve rfind()a benzer. Bunlar da tek, çift veya üç argümanla
kullanılabilir. Tek farkı bulamayınca -1 ile dönmek yerine ValueError
exception oluşturmalırıdır.
>>> s = 'ankara'
>>> s.find('b')
-1
>>> s.index('b')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
count() Metodu
9305
Bu metod ile str içerisinde bir yazı parçasının ya da tek bir karakterin
kaç adet olduğu bilgisi verilir. Bu da tek, çift ya da üç argümanla
kullanılabilir. Argümanların çalışma biçimi aynıdır.
>>> s = 'ankara'
>>> s.count('a', 2, 5)
1
isxxx() Metodları
Bir grup metod vardır. Bunlar yazının tüm karakterlerinin belirtilen koşulu sağlayıp sağlamadığını belirtir. Python 3’ten itibaren UNICODE sisteme geçilmiş olup metotlar UNICODE tablodaki bütün dillerin harflerini bu testte dikkate alırlar.
Belli başlı metotlar şunlardır:
isalpha (alfabetik mi?)
isupper (büyük harf mi?)
islower (küçük harf mi?)
isspace (boşuk karakterlerinden mi?)
isalnum (alfanümerik karakter mi?)
Örneğin:
>>> 'ankara'.isalpha()
True
>>> 'ankara'.isdigit()
False
Metotların Doğrudan Çağırılması
Pekala bir değişkene string atamadan da metotları çağırabiliriz, ki bunu
birçok yerde zaten yaptım: 'alper'.islower() gibi
join() Metodu
9400
Bu metod argüman olarak dolaşılabilir bir nesne alır. Fakat bu nesne
dolaşıldıkça str elde edilmelidir. join() metodu, metodu çağıran str yi
bu dolaşılabilir nesnenin elemanları arasına sokarak yazıyı birleştirir
ve yeni bir str nesnesi elde edilir.
Örnek:
>>> ', '.join(['alper', 'yazar'])
'alper, yazar'
split() Metodu
Bu da join() metodunun tersi gibidir. Bizden bir ayraç alır ve strlerden
oluşan bir liste yapar. Eğer argüman geçmezsek tüm boşluk karakterleri ayraç
olarak kabul edilir.
>>> 'alper,yazar'.split(',')
['alper', 'yazar']
>>> ' ali veli \n\n\t \t selami \t '.split()
['ali', 'veli', 'selami']
strip() Metodu
9529
Argümansız çağrılırsa diğer dillerdeki trim işlemini yapar, yazının başı ve sonundaki boşluk karakterlerini atar, yani white space. Argüman geçersek strip edilecek karakteri belirlemiş oluruz. Argüman birden fazla karakter içeriyorsa tüm bu karakterler bireysel birer strip karakteri olur.
Örnekler:
>>> ' alper yazar '.strip()
'alper yazar'
>>> '. alper yazar '.strip()
'. alper yazar'
>>> '. alper yazar '.strip('.')
' alper yazar '
>>> '. alper yazar '.strip('. ')
'alper yazar'
Yani strip('xyz') dediğimizde x, y ve z ayrı karakterler olarak
ele alınır.
lstrip() ve rstrip()
Left ve Right strip isimli iki metod daha vardır. Bunlar ise yazının sadece solundaki veya sağındaki karakterler üzerinde işlem yaparlar.
partition() Metodu
Yazı içerisinde aranacak bir yazıyı parametre olarak alır, eğer bulursa üçlü bir demet ile geri döner. Demetin ilk elemanı yazıda bulunan yerin sol tarafındaki yazıdan, sonraki elemanın bulunan yazının kendisinden ve sonraki eleman da bulunan yazının sağ tarafındaki yazıdan oluşur. Eğer yazıyı bulamazsa birinci eleman yazının tümü ve ikinci ile üçüncü elemanı boş str olan bir string dönmektedir.
>>> s = 'aliveliselami'
>>> s.partition('veli')
('ali', 'veli', 'selami')
>>> s.partition('hasan')
('aliveliselami', '', '')
replace() Metodu
9672
Bu metod ile bir yazı içerisindeki belli bir yazıyı başka bir yazı ile değiştirir. İki parametresi vardır, birincisi aranacak yazı ikincisi de değiştirilecek yazıyı belirtir.
>>> s = 'ali top at, ali ip atla'
>>> s.replace('ali', 'veli')
'veli top at, veli ip atla'
>>> s = 'ankara ankara güzel ankara seni görmek ister her bahtı kara'
>>> s.replace('a', '')
'nkr nkr güzel nkr seni görmek ister her bhtı kr'
Eğer üçüncü bir argüman girersek bu int olmak zorundadır. Bu toplamda kaç adet
değişim yapabileceğimizi sınırlar.
>>> s = 'istanbul istanbul güzel istanbul'
>>> s.replace('istanbul', 'ankara', 2)
'ankara ankara güzel istanbul'
startswith() Metodu
Yazının istediğimiz yazı ile başlayıp başlamadığını söyler. Geri dönüş değeri
bool türündendir.
Örnek:
>>> s = '- bu bir denemedir'
>>> s.startswith('-')
True
>>> s.startswith('- ')
True
>>> s.startswith('- b')
True
>>> s.startswith('- ba')
False
endswith() Metodu
startswith() metodunun yazının bitip bitmediğini arayan versiyonudur.
upper() ve lower() Metodu
Yazıyı büyük harfe ya da küçük harfe çevirir.
>>> 'AnKaRa-06'.upper()
'ANKARA-06'
Türkçe’de inin UNICODE büyük harf karşılığı I biçimindedir. Inın da küçük
harf karşılığı idir. Bu yüzden Türkçe karşılığı için sorunlar yaşanabilir.
>>> 'iznik gölü'.upper()
'IZNIK GÖLÜ'
Bu problemi önceden replace() ederek çözebiliriz:
>>> 'iznik gölü'.replace('i', 'İ').upper()
'İZNİK GÖLÜ'
9799