Dize metodları

Dizeler (“string”ler) yazılı metin barındırdıkları, sayısal veri olmadıkları için bilimsel hesaplamada önemsiz olduklarını düşünmeyin. Pek çok bilimsel program düz metin şeklinde hazırlanmış verileri okur ve yazar. Düz metin,  birçok veri depolama standardının (XML, JSON, PDB gibi) temeli olduğundan, dizeleri işleyebilmek bilimsel programcı için de önemlidir.

Temel işlemler

Sıralı nesnelere yönelik len, in, not in, +, * gibi işlemler dizelerde de geçerlidir:

>>> "Py" in "PythonBilim"
True
>>> "Bilim" in "PythonBilim"
True
>>> "filim" in "PythonBilim"
False
>>> "filim" not in "PythonBilim"
True
>>> len("PythonBilim")
11
>>> "Python" + "Bilim"   # dizeleri birleştirir
'PythonBilim'
>>> "Python" * 5         # dizeyi tekrarlar
'PythonPythonPythonPythonPython'

Tek ve çift tırnak

Literal dizeler yukarıdaki gibi çift tırnakla (“Python”) veya tek tırnakla (‘Python’) sınırlandırılabilir. Bu esneklik, dizenin içinde bir çeşit tırnak varsa, dizenin çevresinde öbür çeşit tırnak kullanma imkânı verir.

>>> print "Ali'nin kalemini ver"
Ali'nin kalemini ver
>>> print 'Dedim ki: "Gel!"'
Dedim ki: "Gel!"

Eğer her iki tırnak çeşidine de ihtiyaç duyarsak, kaçış karakterleri  ( \’ ve \” ) kullanabiliriz.

>>> print "Ali'ye dedim ki \"Gel!\""
Ali'ye dedim ki "Gel!

Üç tırnak (“””) kullanarak birkaç satıra yayılan bir dize yaratabiliriz.

>>> s = """abc
defgh
qwerty"""
>>> s
'abc\ndefgh\nqwerty'
>>> print s
abc
defgh
qwerty

Sık kullanılan metodlar

Dizelerin çok yaygın uygulamaları olduğu için, Python’da dize (“str”) veri tipiyle tanımlanmış çok sayıda metod mevcut.

>>> dir(str)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__',
'__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__',
'__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode',
'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace',
'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex',
'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase',
'title', 'translate', 'upper', 'zfill']

Bunların hepsini değil, sadece bilimsel programlama çerçevesinde en çok gerekli olduğunu düşündüklerimi ayrıntılı açıklayacağım. Eksik kalan noktalar için Python başvuru belgelerine bakabilirsiniz.

count

Bir dize içinde bir alt dizenin kaç kere geçtiğinin sayısını verir.

>>> "ABCDABCAAABC".count("ABC")
3

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.

>>> "AAAAA".count("AA")
2

find, index

find bir dizenin içinde bir alt dizenin ilk bulunduğu konumu verir. Aranan alt dize mevcut değilse -1 verir.

>>> s = "ABRAKADABRA"
>>> s.find("RA")
2
>>> s.find("XYZ")
-1

Konum saymanın sıfır ile başladığını hatırlayın; o yüzden “RA” dizesi üçüncü harften, yani 2 konumundan başlıyor.

Aramaya sağdan başlamak isterseniz rfind metodunu kullanın.

Eğer amacınız bir alt dizenin nerede olduğunu bulmak değil, sadece bulunup bulunmadığını test etmekse, o zaman find değil in kullanın.

index ile find aynı işe yarar. Tek farkları, aranan alt dize bulunamayınca index‘in bir hata işareti (“ValueError”) vermesidir. Hata yakalamaya dayalı programlarda tercih edilir.

join

Bir sıralı nesnenin (liste, çokuz, dize, vs.) dize tipi elemanlarını birleştirir.

>>> "".join(["A","67","B","0.15"])    # yanyana yapıştır
'A67B0.15'
>>> " ".join(["A","67","B","0.15"])   # araya bir boşluk koyarak yapıştır
'A 67 B 0.15'
>>> "-*-".join(["A","67","B","0.15"]) # araya -*- koyarak yapıştır
'A-*-67-*-B-*-0.15'

Bu işlem, sözgelişi, daha önce harf harf işlemek için ayırdığınız ve işlemden sonra tekrar birleştirmek istediğiniz dizelerde kullanılabilir.

>>> s = "12345"
>>> L = list(s)
>>> L
['1', '2', '3', '4', '5']
>>> L.reverse()
>>> L
['5', '4', '3', '2', '1']
>>> ''.join(L)
'54321'

lstrip, rstrip, strip

Bu metodlar bir dizenin sol ve/veya sağ tarafındaki boş karakterleri kaldırır. lstrip soldan, rstrip sağdan, strip ise her iki yandan boşlukları temizler. Boş karakterlere sadece boşluk (” “) değil, tab (“\t”) ve satırbaşı (“\n”) da dahildir. Bu metodlar özellikle bir dosya satır satır okunurken işe yarar.

>>> s = "\n\t   ferah ferah   \t\n"
>>> print s

       ferah ferah       

>>> s.lstrip()
'ferah ferah   \t\n'
>>> s.rstrip()
'\n\t   ferah ferah'
>>> s.strip()
'ferah ferah'

replace

Dizede belli bir alt dizenin ortaya çıktığı her yeri başka bir alt dizeyle değiştirir.

>>> s = "eskişehir'de eski bir evde eski bir kapı"
>>> print s.replace("eski", "yeni")
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:

>>> print s.replace("eski", "yeni", 1)
yenişehir'de eski bir evde eski bir kapı

split, rsplit, splitlines

split metodu bir dizedeki kelimeleri boşluklardan ayırır ve bir dizeler listesi verir. Fazlalık boşluklar hesaba katılmaz.

>>> "   kedi kopek   balik   ".split()
['kedi', 'kopek', 'balik']

Boşluk yerine başka bir ayırıcı kullanılabilir. Ayrıcı istenilen sayıda karakterden oluşabilir.

>>> "1,2,3,4,5,6".split(",")
['1', '2', '3', '4', '5', '6']
>>> "a<>b<>c<>d<>e".split("<>")
['a', 'b', 'c', 'd', 'e']

Ana dizeden yapılacak ayırmaları belli bir sayıyla sınırlamak da mümkündür.  Arta kalanlar tek bir dizede toplanır.

>>> "1 2 3 4 5 6".split(" ", 3)
['1', '2', '3', '4 5 6']

Soldan değil sağdan başlayarak ayırmamız gerekirse rsplit metodunu kullanırız.

>>> "1,2,3,4,5,6".rsplit(",",3)
['1,2,3', '4', '5', '6']

Birden fazla satır barındıran bir dizeyi, satır satır ayrı dizelere bölmek için splitlines metodu kullanılabilir.

>>> s = "abc def\nxyz jkl mno\r\nqwe rty\r"
>>> s.splitlines()
['abc def', 'xyz jkl mno', 'qwe rty']

Neden splitlines yerine, split metodunu “\n” ayırıcısıyla kullanmayalım? Satır sonu işaretleri işletim sistemine göre farklılık gösterir. UNIX/Linux sistemlerinde satır sonunda “\n” karakteri kullanılırken , eski Macintosh’larda ‘\r’, Windows’ta “\r\n” çift karakteri kullanılır. splitlines her durumda zahmetsizce kullanabilir.

Dize metodları” üzerine bir yorum

  1. Geri bildirim: Tablo veri dosyalarını işlemek | PythonBilim

Yorum bırakın