[Bölüm 11] Python Dilinde Karakter Dizisi (str) Veri Yapıları

Merhaba arkadaşlar bugün bu yazımda sizlere Python dilindeki veri yapılarından karakter dizilerini (str) anlatacağım. Pythondaki veri tiplerine daha önce bölüm 10 da ufak bir giriş yapmıştık. Şimdi ise ilk olarak karakter dizilerinden başlayalım.Öncelikle karakter dizileri tırnak işaretinin içerisine yazılarak oluşturulur ve daha sonradan değiştirilemezler lakin dilimlenebir ve birleştirilebilirler.

Kaçış (escape) Karakterleri-Dizileri

Kaçış karakterlerinde bilinmesi gereken en önemli detay karakterin başında mutlaka kesmek işaretinin

( / ) yazılmasıdır.

Ters Kesme İşareti ( \\ )

Ters kesme işaretini yazı içerisinde kullanmak istediğimizde \\ şeklinde yazıya yerleştiririz. Bunun sebebi ise kaçış dizilerinin hepsinde \ işareti kullanıldığı için \\ işaretinin birinci elemanının kaçış dizisini ikinci elemanı ters kesme işaretini simgelemesidir.

print('ters kesme işareti: \\')

Çıktı:

ters kesme işareti: \

Tırnak İşareti ( \’ ) veya Çift tırnak İşareti ( \” )

Cümle içerisinde tırnak işareti kullandığımız da Python bunu yazının bitimi olarak algılayabilir. Bu durumu önleyebilmek için yazı içerisinde tırnak işareti kullanmadan önce ters kesme işareti kullanarak bu durumu önlemiş oluyoruz.

print('\''elektrik\'' kelimesi 8 harften oluşur.')

Çıktı:

''elektrik'' kelimesi 8 harften oluşur.
print('ElektrikVadisi.Net\'e hoşgeldiniz.')

Çıktı:

ElektrikVadisi.Net'e hoşgeldiniz.

Zil Sesi ( \a )

\a kodunu yazdırdığımızda bip zil sesini alırız.

print('\a')

Çıktı:

!bip!

Eğer çıkan bip zil sesini artırmak istiyorsak kodu istediğimiz bir sayı ile çarpabiliriz. Bu metod Windows işletim sisteminde çalışırken Linux’ta çalışacağının bir grantisi yoktur.

print('\a'*10)

Çıktı:

!bip!!bip!!bip!!bip!!bip!!bip!!bip!!bip!!bip!!bip!

İmleç Kaydırma ( \b )

Biraz kulağa garip gelebilir ama bu kod tam olarak kendisinden bir önceki elemanı siliyor. Aşağıdaki örnekle daha iyi anlarsınız.

print('kalem\b')

Çıktı:

kale

Sayfa Başı ( \f )

Yazının içerisine \f komutunu koyduğumuz an devamında gelecek olan kelimeleri yeni sayfadan başlatılır. Günümüzde pek kullanılmasa da Python’da bu komut mevcuttur.

print('ElektrikVadisi.Net\f ElektrikVadisi.Net')

Çıktı:

ElektrikVadisi.Net
ElektrikVadisi.Net

Yeni Satır ( \n )

Matlab ve C dillerinde de aynı işlevi gerçekleştiren bu komut yeni bir satıra geçmemizi sağlar.

print('ElektrikVadisi.Net\nElektrikVadisi.Net')

Çıktı:

ElektrikVadisi.Net
ElektrikVadisi.Net

UNICODE Karakter Adı

Öncelikle şunu söylemeliyim ki Python dilindeki terimler İngilizce dilinden alınmıştır ve İngilizce de Latin harflerini kullanmaktadır. Yani Python’da Latin harflerini kullanıyor. Harflerin UNICODE sistemindeki uzun adını \N komutu ile yazınca harfin kendisini bize çıktı verir. Kafanız karışır gibi olmuş olabilir hemen aşağıda örnekleyeceğim. Önce bir harfin UNICODE sistemindeki karşılığını import unicodedata modülü ve unicodedata.name(‘harf’) komut formatıyla bulacağız ve sonrasında çıktıyı \N komutu ile çalıştıracağız.

import unicodedata
unicodedata.name('A')

Çıktı:

'LATIN CAPITAL LETTER A'
print("\N{LATIN CAPITAL LETTER A}")

Çıktı:

A

NOT:print(‘\Nevşehir’) kodunu çalıştırırken Python bunu bir kaçış dizisi olarak algılar bu gibi durumlarda dikkatli olmamız gerekiyor.

Aynı Satırın Satır Başı ( \r )

Bu kodu yazı içerisinde kullandığımızda kendisinden önceki harflerin üzerine kendisinden sonraki harfleri yazar. Evet biraz karışık lakin hemen aşağıda örneklerle açıklıyorum.

print('Samsun\rİstanbul')
print('Üniversite\rKampüs')

Çıktı:

İstanbul
Kampüssite

Sekme Tuşu (\t )

Matlab’da da aynı işlevde olan \t komutu burada da Tabb kadar boşluk bırakıyor.

print('Elektrik\tVadisi\tHamit\tCan\tDinç')
print('Elektrik','Vadisi','Hamit','Can','Dinç',sep='\t')

Çıktı:

Elektrik	Vadisi	Hamit	Can	Dinç
Elektrik	Vadisi	Hamit	Can	Dinç

Düşey Sekme

Bu komut ile düşey sekme oluştururuz. Lakin her işletim sisteminde bu kod çalışmayabilir haberiniz olsun. Hemen örneğini veriyorum.

print('Elektrik\Vadisi')

Çıktı:

Elektrik
	Vadisi

NOT:Bazen kodlarımızın içinde yazı olarak \ işaretinden sonra a, b, f, n, r, t gibi harfler gelir. Bu gibi durumlarda kaçış dizilerini devre dışı bırakmak istiyorsak r komutu kullanılır. Buna raw mod denir. Aşağıya örneği mevcuttur.

print(r'kalem\nkağıt\tsilgi\akapı')

Çıktı:

kalem\nkağıt\tsilgi\akapı

Türkçe Karakterlerin UNICODE Karşılıkları

Ç \u00c7 Ş \u015e ı \u0131
Ğ \u011e Ü \u00dc ö \u00f6
İ \u0130 ç \u00e7 ş \u015f
Ö \u00d6 ğ \u011f ü \u00fc

 

print('\u00c7 \u011e \u0130 \u00d6 \u015e \u00dc \u00e7 \u011f \u0131 \u00f6 \u015f \u00fc')

Çıktı:

Ç Ğ İ Ö Ş Ü ç ğ ı ö ş ü

String Nesnesinde Dilimleme ve Birleştirme

Arkadaşlar yazımın başında karakter dizilerinde eleman değiştirmenin mümkün olmadığını söylemiştim. Evet hala mümkün değil fakat bir string dizisinin elemanlarını değiştirmeden o elemanları kullanarak istediğimiz gibi yeni bir string elemanı oluşturabiliyoruz. Bunu dilimleme ve birleştirme yöntemi ile yapacağız. Aşağıya örnek olsun birkaç tane kalıp kod koyuyorum.
Bu komutlarda s[ilk eleman : son eleman : adım] mantığı vardır. Yani ilk elemandan son elemana belirtilen adımlara denk gelen elemanları al demektir.
s stringi için;

s[:3] İlk elemandan itibaren ilk 3 elemanı al
s[0:5] İlk elemandan itibaren ilk 5 elemanı al
s[3:7] 3. elemandan itibaren başlayarak 7. elemana kadar al
s[5:] 5. elemandan sonrasını al
s[:-3] Son 3 eleman hariç hepsini al
s[-11:-3] Sondan 11. elemandan başla sondan 3. elemana kadar al
s[:5] + ‘elektrikvadisi.net’ + s[5:] İlk 5 karakterden sonra araya elektrikvadisi.net yaz ve devam et
s[:2] + s[-7:] İlk 2 elemanı al, sondan 7. elemana kadar al ve birleştir, arasına bir şey ekleme

 

a='elektrikvadisi-hamitcandinç'
print('a = ',a)
print('a stringinin eleman sayısı(uzunluğu) = ',len(a))
print('En baştan ilk 3 eleman = ',a[:4])
print('En baştan ilk 3 eleman = ',a[0:4])
print('3. elemandan 7.elemana kadarki elemanlar',a[3:7])
print('3. elemandan sonuna kadarki elemanlar = ',a[3:])
print('Son 7 eleman hariç tamamı = ',a[:-7])
print('Son 11 elemanın ilk 7 elemanını al = ',a[-11:-4])
print('İlk 7 karakterden sonra araya \'- mühendislik-\' ekle = ',a[:7] + '-mühendislik-' + a[7:])
print('İlk 3 ve son 7 elemanı al arasını sil = ',a[:3] + a[-7:])

Çıktı:

a =  elektrikvadisi-hamitcandinç
a stringinin eleman sayısı(uzunluğu) =  27
En baştan ilk 3 eleman =  elek
En baştan ilk 3 eleman =  elek
3. elemandan 7.elemana kadarki elemanlar ktri
3. elemandan sonuna kadarki elemanlar =  ktrikvadisi-hamitcandinç
Son 7 eleman hariç tamamı =  elektrikvadisi-hamit
Son 11 elemanın ilk 7 elemanını al =  amitcan
İlk 7 karakterden sonra araya '- mühendislik-' ekle =  elektri-mühendislik-kvadisi-hamitcandinç
İlk 3 ve son 7 elemanı al arasını sil =  elecandinç

Şimdi biraz da indisleri neye göre yazdığımızdan bahsedelim.

string e l e k t r i k v a d i s i
indis 0 1 2 3 4 5 6 7 8 9 10 11 12 13
-indis -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1

Yukarıdaki resimde aşağıdaki örnekler birbiri ile ilişkilidir. 1. karakter 0. indis olarak işleme alınır.
s[0] : e
s[5] : r
s[-3] : i
s[-7] : k
s[0:7] : 0. indis dahil ama 7. indis dahil değildir.

Karakter Dizilerinde Aritmetik İşlemler

Çoğu Python veri tipinde olduğu gibi karakter dizilerinde de aritmetik işlemleri yapabiliriz.

print('elektrikvadisi'*3)

Çıktı:

elektrikvadisielektrikvadisielektrikvadisi

Şimdi aşağıdaki tabloda karakter dizileri için önemli bazı işlevsel kullanım metodlarını vereceğim.

s.capitalize()  s stringinin ilk harfini büyük yapar
s.center(uzunluk[,dolgu])  s stringini ortalar ve yazılmış olan uzunluğu tamamlayana kadar dolgu karakterini ekleyerek boş kalan kısmı doldurur
s.count(‘elektrik’)  s stringi içerisinde kaç tane ‘elektrik’ geçtiğini sayar
s.find(‘elektrik’,a,b)  s stringi içerisinde a-b aralığında ‘elektrik”in hangi konumda olduğunu bulur şayet bulamazsa -1 çıktısı verir
s.index(‘elektrik’,a,b) s stringi içerisinde a-b aralığında ‘elektrik”in hangi konumda olduğunu bulur şayet bulamazsa hata mesajı verir
s.isalnum()  s stringindeki bütün karakterler rakam veya harf mi? True veya False çıktısı verir
s.isalpha()  s stringindeki bütün karakterler alfabetik mi?
s.isdecimal()  s stringi desimal bir sayı mıdır?
s.isdigit()  s stringindeki bütün karakterler rakam mı?
s.isidentifier()  s stringi geçerli bir değişken adına mı sahip?
s.islower()  s stringindeki karakterlerin hepsi küçük harf mi?
s.isnumeric()  s stringi sayı mı?
s.isprintable()  s stringi print edilebilir yani yazdırılabilir bir karakter mi?
s.isspace()  s stringi boşluk karakteri mi?
s.isupper()  s stringindeki karakterlerin hepsi büyük harf mi?
s.ljust(uzunluk[,dolgu])  s stringini sola yaslar ve blirtilen uzunluğu tamamlayana kadar dolgu karakterini ekleyerek boş kalan kısmı doldurur
s.lower()  s stringi içerisindeki karakterleri küçük harf yapar
s.lstrip(karakterler)  s stringinin solundaki yani başındaki parantez içerisinde belirtilen karakterleri temizler
s.replace(‘elektrik’,’vadi’)  s stringindeki ‘elektrik’ karakterlerini ‘vadi’ karakterleri ile değişirir
s.rjust(uzunluk[,dolgu])  s stringini sağa yaslar ve blirtilen uzunluğu tamamlayana kadar dolgu karakterini ekleyerek boş kalan kısmı doldurur
s.rstrip(karakterler)  s stringinin sağındaki yani sonundaki parantez içerisinde belirtilen karakterleri temizler
s.split(None,sayı)  s stringini belirtilen sayı kadar böler eğer -1 yazılıysa bu limit olmadığı anlamına gelir
s.startswith(ön[,ilk,[,son]])  s stringinde ön karakteri ile başlayan sözlükleri arar. Eğer belirtilmişse bu aramayı ilk-son aralığında yapar
s.strip(karakterler)  s stringindeki sağ ve soldaki boşluk veya belirtilen karakterleri temizler
s.swapcase()  s stringindeki büyük harfleri küçük harfe, küçük harfleri büyük harflere çevirir
s.title()  s stringindeki sözcüklerin ilk harflerini büyük gerisini küçük yapar.
s.upper()  s stringindeki karakterleri büyük harf yapar
s.zfill(uzunluk)  s stringinde karakterlerin soluna yani en başa belirtilen uzunluğa erişilene kadar 0 (sıfır) ekler

Sayıları String’e Dönüştürme

str koumutu ile sayı olarak tanımlanan karakterler string dizisine dönüştürülür.

a = 123456789
str(a)

Çıktı:

'123456789'

Not: String dizileri normalde tek veya çift tırnak işareti içerisine konularak yazılırlar. 3 tırnak işareti arasına konulsa bir fark yoktur.

a='elektrikvadisi'
a=''elektrikvadisi''
a='''elektrikvadisi'''

String Dizilerinin Silinmesi

Yazımın başında string dizilerinin eleman ve karakterlerinin parça parça silinemeyeceğiniz söylemiştim. Bu halen de geçerli lakin string dizisini tamamen silebiliriz. Bu da del kodu ile mümkündür.

a = 'elektrikvadisi.net'
del a
s.split(‘ , ‘)  s stringini listeye dönüştürür
s.split()  s stringini boşluklara göre parçalar
s.split(‘a’)  s stringini ‘a’ harfine göre parçalar

String Birleştirme

s.join(a) s stringine a nesnesini ekler yani ikisini birleştirir. Aşağıdaki 3 stringte aynıdır.

a = 'Elektrik' 'Vadisi'
b = ''Elektrik'' ''Vadisi''
c = ('Elektrik' 'Vadisi') 
print(a)
print(b)
print(c)

Çıktı:

ElektrikVadisi
ElektrikVadisi
ElektrikVadisi

format() Kodu ile String Pozisyonu Ayarlama

format() kodu belirtilen sayıları konum olarak algılayarak stringleri çıktı da konumlandırır.

print('{}{}.{}'.format('Elektrik','Vadisi','Net'))

Çıktı:

ElektrikVadisi.Net

Formatlarken Hizlama ve Dolgu Yapma

<: sola dayama
^: ortalama
>: sağa dayama

 

 

 

print('|{:<15}|{:^15}|{:>15}|'.format('Elektrik','Vadisi','Net'))

Çıktı:

|Elektrik       |    Vadisi     |            Net|
print('|{:+<15}|{:-^15}|{:*>15}|'.format('Elektrik','Vadisi','Net'))

Çıktı:

|Elektrik+++++++|----Vadisi-----|************Net|
a = (10,20,30)
b = 'deneme stringi: {0}-{1}-{2}'.format(*a)
print(b)

Çıktı:

deneme stringi: 10-20-30

NOT: Yukarıdaki örnekte * karakterini koda eklemeyi unutmayın.