print( "Def" in "Abcç Defg" )
print( "def" in "ABcç Defg" )
print( "def" not in "ABcç Defg" )
True
False
True
Kaan Öztürk
February 17, 2018
Python programlamaya giriş yazı dizimizin bu bölümünde dizelerin kullanımını daha ayrıntılı inceleyeceğiz ve dize veri tipine ait olan metodların bazılarına örneklerle göz atacağız. Dizinin bütün yazılarına erişmek için Python Programlamaya Giriş kategorimize bakabilirsiniz. Bu dizideki yazılar ayrıca Jupyter defterleri halinde GitHub depomuzda da mevcut.
Dize, bir veya daha fazla karakterden bir araya gelmiş bir sıralı veri tipidir. Dizelerle düz metin halindeki veriler alınıp işlenebilir. Veriler pek çok zaman düz metin dosyaları halinde bulunur. HTML, XML, JSON veya CSV gibi standartlardaki veriler de düz metinden oluşur. Bir metin verisini dize halinde aldığımızda, dize metodlarını kullanarak bu verileri işleyebilir, biçimlerini değiştirebilir, parçalayabilir, birleştirebilir, sıralayabilir, değişiklik yapabiliriz.
Sıralı nesnelerle kullanılan len
, in
, not in
, +
, *
gibi işlemler dizelerde de aynı şekilde çalışır:
True
False
True
Bir nesnenin dize biçimini elde etmek için str
fonksiyonu kullanılabilir.
Python’da diziler istenirse tek tırnakla, istenirse çift tırnakla sınırlandırarak kullanılabilirler. İkisi de aynı nesneyi üretir; yani "abc"
ile 'abc'
aynı dizedir.
Bu esneklik, dizenin içinde bir çeşit tırnak varsa, dizenin çevresinde öbür çeşit tırnağı kullanma imkânı verir.
Eğer dizenin içindeki metinde her iki tırnak çeşidine de ihtiyaç duyarsak, kaçış karakterleri \’
ve \"
kullanabiliriz.
Üç tırnak ("""
veya '''
) kullanarak birkaç satıra yayılan bir dize yaratabiliriz. Yaptığımız kaydırmalar, satırbaşları, boş satırlar dizenin parçası olarak kaydedilir. Bu tür dizeler özellikle fonksiyonlardaki belge dizelerinde (docstring) çok kullanılır.
Dize sınıfı içinde tanımlanmış pek çok metod mevcut. Bunların tam bir listesini görmek için dir(str)
komutunu verebilirsiniz.
['__add__',
'__class__',
'__contains__',
'__delattr__',
'__dir__',
'__doc__',
'__eq__',
'__format__',
'__ge__',
'__getattribute__',
'__getitem__',
'__getnewargs__',
'__gt__',
'__hash__',
'__init__',
'__init_subclass__',
'__iter__',
'__le__',
'__len__',
'__lt__',
'__mod__',
'__mul__',
'__ne__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__rmod__',
'__rmul__',
'__setattr__',
'__sizeof__',
'__str__',
'__subclasshook__',
'capitalize',
'casefold',
'center',
'count',
'encode',
'endswith',
'expandtabs',
'find',
'format',
'format_map',
'index',
'isalnum',
'isalpha',
'isdecimal',
'isdigit',
'isidentifier',
'islower',
'isnumeric',
'isprintable',
'isspace',
'istitle',
'isupper',
'join',
'ljust',
'lower',
'lstrip',
'maketrans',
'partition',
'replace',
'rfind',
'rindex',
'rjust',
'rpartition',
'rsplit',
'rstrip',
'split',
'splitlines',
'startswith',
'strip',
'swapcase',
'title',
'translate',
'upper',
'zfill']
Her bir metodun kısa bir açıklaması için help()
komutunu kullanabilirsiniz.
Help on method_descriptor:
capitalize(...)
S.capitalize() -> str
Return a capitalized version of S, i.e. make the first character
have upper case and the rest lower case.
Burada bu metodların belli başlılarının kullanımlarını örnekleyerek açıklayacağız. Özellikle, metin şeklindeki verilerin analizinde kullanılabilecek metodları seçtik. Tam bir liste için Python yardım belgelerine bakabilirsiniz.
Bir dizenin başlangıcında veya sonunda belli bir alt dizenin bulunması halinde True
verirler.
Dizeleri tamamen küçük veya büyük harfe çevirmek, cümlenin ilk harfinin büyük olmasını sağlamak, veya bir başlıktaki gibi her kelimenin büyük harfle başlamasını sağlamak için çeşitli dize metodları vardır.
s = "Pijamalı hasta yağız şoföre çabucak güvendi."
print("s.upper():", s.upper()) # Hepsini büyük harfe çevir.
print("s.lower():", s.lower()) # Hepsini küçük harfe çevir.
print("s.capitalize():", s.capitalize()) # Sadece cümlelerin ilk harfini büyük yap.
print("s.swapcase():", s.swapcase()) # Büyük harfleri küçüğe, küçükleri büyüğe çevir.
print("s.title():", s.title()) # Her kelimenin ilk harfini büyük yap.
s.upper(): PIJAMALI HASTA YAĞIZ ŞOFÖRE ÇABUCAK GÜVENDI.
s.lower(): pijamalı hasta yağız şoföre çabucak güvendi.
s.capitalize(): Pijamalı hasta yağız şoföre çabucak güvendi.
s.swapcase(): pIJAMALI HASTA YAĞIZ ŞOFÖRE ÇABUCAK GÜVENDI.
s.title(): Pijamalı Hasta Yağız Şoföre Çabucak Güvendi.
Görüldüğü gibi bu fonksiyonlar Türkçedeki i ve I harflerini doğru şekilde işleyemiyorlar. Küçük i harfi büyük I harfine (ve tersine) dönüştürülüyor. Bu yüzden Python’un dize metodları, yazılımda Türkiye testi olarak bilinen testi geçemiyor.
Bu problemin çevresinden dolaşmak için kullanılacak bir yöntemi şuradan öğrenebilirsiniz.
Bir dize içinde bir alt dizenin kaç kere geçtiğinin sayısını verir.
Sadece örtüşmeyen alt dizeler sayılır. Sözgelişi, "AAAAA"
dizesinin içinde, örtüşmeleri sayarsak "AA"
altdizesi 5 kere mevcuttur, ama count
2 sonucunu verir.
find
metodu, bir dizenin içinde bir alt dizenin ilk bulunduğu konumu verir. Aranan alt dize mevcut değilse -1 döndürür.
Konum saymanın sıfır ile başladığını hatırlayın; o yüzden "RA"
dizesi üçüncü harfte başlıyor, ama konum indeksi 2.
Dikkat: Amacınız belli bir alt dizenin yerini bulmak değil, sadece mevcut olup olmadığını anlamaksa find
yerine in
kullanın.
Aramaya sağdan başlamak isterseniz rfind
metodunu kullanın.
index
ile find
aynı işi yapar. Tek farkları, aranan alt dize bulunamayınca index
’in bir hata işareti ("ValueError"
) vermesidir. Hata yakalamaya dayalı programlarda tercih edilir.
Aramaya sağdan başlamak isterseniz rindex
komutunu kullanabilirsiniz.
Bir sıralı nesnenin (liste, çokuz, dize, vs.) dize tipi elemanlarını birleştirerek yeni bir dize üretir.
Bu metodlar bir dizenin sol ve/veya sağ tarafındaki boş karakterleri (boşluk, kaydırma \t
, satırbaşı \n
) kaldırır. lstrip
soldaki, rstrip
sağdaki, strip
ise her iki yandaki boşlukları temizler. Bu metodlar özellikle bir dosya satır satır okunurken yararlı olur.
Dizede belli bir alt dizenin ortaya çıktığı her yeri başka bir alt dizeyle değiştirir.
"yenişehir'de yeni bir evde yeni bir kapı"
Tercihe bağlı olarak, soldan itibaren sadece belli sayıda değiştirme de yapılabilir:
split
metodu bir dizedeki kelimeleri belli yerlerden (varsayılan olarak boşluk karakterlerinden) böler ve ortaya çıkan bölümlerden oluşan bir dize listesi verir. Fazlalık boşluklar hesaba katılmaz.
Boşluk yerine başka bir ayırıcı kullanılabilir. Ayrıcı istenilen sayıda karakterden oluşabilir.
Sadece belli sayıda bölme yapmak da mümkündür. Arta kalan kısım tek bir dizede toplanır.
Soldan değil sağdan başlayarak ayırmamız gerekirse rsplit
metodunu kullanırız.
Birden fazla satır barındıran bir dizeyi satır sınırlarından bölmek için splitlines
metodu kullanılabilir.
splitlines
metodu sadece satırbaşı ("\n"
) ile değil, "\r"
, "\v"
, "\f"
, ve satır sonu sayılan başka birkaç karakter ile de böler. Ayrıca, split
’ten farklı olarak dize sonundaki "\n"
karakterini de göz ardı eder. Bir dosyanın içeriğini bütün olarak bir dizeye yüklediyseniz, onu satırlara bölmek için en uygunu splitlines
kullanmaktır.