String; harflerin, kelimelerin veya diğer karakterlerin bir koleksiyonudur. İlkel veri yapılarından biridir ve veri işleme için yapı taşlarıdır. Python'da str adlı yerleşik bir string sınıfı vardır. Python string'leri "değiştirilemez"dir; yani oluşturulduktan sonra değiştirilemezler. String işlemede, değiştirilemez özelliklerinden dolayı hesaplanan değerleri temsil etmek için ilerledikçe yeni string'ler oluştururuz.
Bu eğitimde string'leri derinlemesine inceleyecek ve aşağıdaki konuları ele alacaksınız:
- Önce Python String'lerin ne olduğunu ve nasıl temsil edildiklerini göreceksiniz.
- Ardından, Python'da dilimleme ve adımlama kavramlarının tanıtılacağı String Dilimleme'ye dalacaksınız.
- Ayrıca bazı yaygın string işlemlerini uygulamalı olarak göreceksiniz.
- Son olarak, string'leri biçimlendirmenin çeşitli yollarını göreceksiniz. Şunları inceleyeceksiniz:
- % Biçimlendirme
FormatterSınıfı- Şablonlar
- F-string, Python 3.6 sürümüyle string biçim ailelerine eklenen en yeni yöntem

Python'da veri yapıları hakkında daha fazla öğrenmek ilginizi çekiyorsa, DataCamp'in iki bölümlük Python Data Science Toolbox kursuna mutlaka göz atın. Bu kurs; fonksiyonlar, yineliyiciler, listeler vb. konularına daha derinlemesine iner.
String'ler
Python'da metinsel veriyi str nesnesiyle işleyebilirsiniz. String'ler Unicode'un değiştirilemez sıralarıdır. Unicode, dillerdeki tüm karakterleri temsil etmek için tasarlanmış bir sistemdir. Unicode'da her harf, karakter 4 baytlık bir sayı olarak temsil edilir. Her sayı benzersiz bir karakteri ifade eder.
Bir string'i temsil etmek için onu tırnak içine alırsınız. Bunu yapmanın birden fazla yolu vardır:
- Tek tırnak, şu örnekte olduğu gibi: 'Tek tırnak, string'inize "çift" tırnak yerleştirmenize imkân tanır.'
- Çift tırnak. Örneğin: "Çift tırnak, string'inize 'tek' tırnak yerleştirmenize imkân tanır."
- Üç tırnak, şu örnekte olduğu gibi: """Çift tırnakla üç tırnak""", '''Tek tırnakla üç tırnak.'''
Üç tırnaklı string'ler birden çok satırlı string'lerle çalışmanıza olanak tanır ve ilişkili tüm boşluk karakterleri string'e dahil edilir.
single_quote = 'Single quote allow you to embed "double" quotes in your string.'
double_quote = "Double quote allow you to embed 'single' quotes in your string."
triple_quote = """Triple quotes allows to embed "double quotes" as well as 'single quotes' in your string.
And can also span across multiple lines."""
String'ler değiştirilemezdir; yani bir string içinde herhangi bir değeri değiştirmeye çalışırsanız hata alırsınız. Değişiklikleri uygulamak için yeni bir string oluşturmanız gerekir.
triple_quote = '''This is triple quoted string using "single" quotes.'''
triple_quote[35] = "'"
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-207-62d335428dcf> in <module>()
1 triple_quote = '''This is triple quoted string using "single" quotes.'''
----> 2 triple_quote[35] = "'"
TypeError: 'str' object does not support item assignment
triple_quote_new = triple_quote[0:35] + "'single'" + triple_quote[43:]
print(triple_quote_new)
This is triple quoted string using 'single' quotes.
Bir string'in uzunluğunu yerleşik len() fonksiyonunu kullanarak bulabilirsiniz:
len(triple_quote_new)
51
Python'ı Ücretsiz Öğrenmeye Başlayın
Orta Seviye Python
Python'da String Dilimleme
String'ler bir karakter dizisi olduğundan, tıpkı Python listeleri veya demetlerinde olduğu gibi dilimleme ve indeksleme ile erişebilirsiniz. String'ler, string içindeki her karaktere göre indekslenir ve indeksleme 0'dan başlar:

Yukarıdaki string'de ilk indeks C'dir ve 0 olarak indekslenmiştir. Son karakter bir nokta .'dır ve string'in 16. karakteridir. Karakterlere -1'den başlayarak ters yönde de erişebilirsiniz; bu, string'deki .'a erişmek için -1'i indeks değeri olarak kullanabileceğiniz anlamına gelir. Chocolate ve cookie arasında bir boşluk da vardır; bu da string'in bir parçasıdır ve bu örnekte 9. indeks olmak üzere kendi indeksine sahiptir. Bunu dilimlemeyle kontrol edebilirsiniz.
Python string'indeki her karakterin karşılık gelen bir indeks numarası olduğundan, string'lere diğer sıralı veri tiplerinde olduğu gibi erişebilir ve onları işleyebilirsiniz. Dilimleme, Python'da bir kapsayıcı nesneden indeks değerlerini kullanarak belirli bir öğeyi veya alt kümesini seçmenizi sağlayan bir tekniktir. Dilimleme, belirli alt string'leri bulmak veya onlara erişmek için string'inizin indeksleri arasında döngü yazma zahmetinden sizi kurtarır.
snack = "Chocolate cookie."
print(snack[0])
print(snack[9])
print(snack[-1])
C
.
Diyelim ki aşağıdaki string'den 'cookie' alt string'ini çıkarmak istiyorsunuz. Bunu nasıl yapardınız?
Böyle durumlarda aralık dilimlemeyi kullanırsınız.
Aralık dilimlemenin söz dizimi şöyledir: [Başlangıç indeksi (dahil): Bitiş indeksi (hariç)]
snack = "Chocolate cookie."
print(snack[10:16])
cookie
Bunu, bitiş indeksi için negatif değer kullanarak da yapabilirsiniz:
print(snack[10:-1]) # -1: çünkü dilimlemede bitiş indeksi hariç tutulur.
cookie
Bitiş indeksini belirtmeden dilimlemek, başlangıç indeksinden cümlenin en son indeksine kadar olan karakterleri yakaladığınız anlamına gelir. Benzer şekilde, başlangıç indeksi olmadan dilimlemek, string'in en başından bitiş indeksine kadar başlamanız anlamına gelir:
# Bitiş değeri verilmedi
print(snack[0:])
# Başlangıç değeri verilmedi (Söz dizimine göre bitiş değeri hariçtir)
print(snack[:-1])
# Bu da mümkündür
print(snack[:])
Chocolate cookie.
Chocolate cookie
Chocolate cookie.
String dilimleme üçüncü bir parametre olan stride'ı da kabul eder; bu, string'den ilk karakter alındıktan sonra kaç karakter ilerlemek istediğinizi belirtir. stride'ın varsayılan değeri 1'dir.
Daha iyi anlamak için stride'ı uygulamada görelim:
number_string = "1020304050"
print(number_string[0:-1:2])
12345
İpucu: Adımlamayla yapabileceğiniz çok havalı bir şey, bir string'i tersine çevirmektir:
print(number_string[::-1]) #
0504030201
-1 adım değeri, sondaki karakterden başlamanıza ve her seferinde bir karakter hareket etmenize olanak tanır.
Alternatif olarak, değeri -2 verirseniz sondan başlar ve her seferinde iki karakter hareket edersiniz:
print(number_string[::-2]) #
00000
Yaygın String İşlemleri
Dilimleme ve aralık dilimleme, string'lerde gerçekleştirmeniz gereken yaygın işlemlerdir. Ayrıca toplama kadar basit olan string birleştirme de vardır:
string1 = 'Chocolate'
string2 = 'cookie'
snack = string1 + " " + string2
print(snack)
Chocolate cookie
Ancak, bir string'i başka bir veri türüyle birleştirmeye çalışırsanız bu çalışmaz.
cost = 15
string1 = "The total in Euro is: "
bill = string1 + cost
print(bill)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-218-7d5c5248b927> in <module>()
2 string1 = "The total in Euro is: "
3
----> 4 bill = string1 + cost
5 print(bill)
TypeError: Can't convert 'int' object to str implicitly
Burada, bir string'i bir tamsayı değeriyle birleştirmeye çalıştınız; bu izin verilmez. Yorumlayıcı, basit tamsayı toplamı mı yoksa string birleştirme mi yapmaya çalıştığınızı örtük olarak anlayamaz. Ancak, şimdi bunu deneyin:
bill = string1 + str(cost)
print(bill)
The total in Euro is: 15
Bunun nedeni, bir tamsayıyı açıkça string değere dönüştürüp ardından birleştirme uygulamanızdır. Veri türü dönüşümleri hakkında daha fazla bilgi için bu eğiticiye göz atın.
Bir string'i tekrarlamak için * işlemini kullanın.
single_word = 'hip '
line1 = single_word * 2 + 'hurray! '
print(line1 * 3)
hip hip hurray! hip hip hurray! hip hip hurray!
Bir string'de üyelik özelliğini in ve not in ile de kontrol edebilirsiniz:
sub_string1 = 'ice'
sub_string2 = 'glue'
string1 = 'ice cream'
if sub_string in string1:
print("There is " + sub_string + " in " + string1)
if sub_string2 not in string1:
print("Phew! No " + sub_string2 + " in " + string1)
There is ice in ice cream
Phew! No glue in ice cream
Python, string'leri işlemek için birçok yerleşik yöntem veya yardımcı fonksiyon sağlar. Bir alt string'i değiştirme, bir paragraftaki belirli kelimeleri büyük harfle başlatma, bir string'in başka bir string içindeki konumunu bulma bu yerleşik yöntemlerle yapabileceğiniz işlemlerden bazılarıdır.
Bunlardan bazılarına ayrıntılı bakalım:
str.capitalize(): string'in ilk karakteri büyük harf olacak şekilde bir kopyasını döndürür.
str.capitalize('cookie')
'Cookie'
str.islower(): string'deki tüm karakterler küçük harfse true, değilse false döndürür.
snack = 'cookie'
snack.islower()
True
str.find(substring): alt string'in bulunduğu en düşük indeksi döndürür. Alt string'in aranmasını istediğiniz başlangıç ve bitiş indekslerini de belirtebilirsiniz. Alt string bulunamazsa -1 döndürür.
str1 = 'I got you a cookie'
str2 = 'cook'
str1.find(str2)
12
str.count(substring): alt string'in string içinde kaç kez geçtiğini sayar. String için başlangıç ve bitiş indeksini de belirtebilirsiniz.
str1 = 'I got you a cookie, do you like cookies?'
str2 = 'cookie'
str1.count(str2)
2
str.isspace(): string yalnızca boşluk karakterleri içeriyorsaTrue, aksi halde false döndürür. Boşluk karakterleri; boşluk, sekme, yeni satır vb. karakterlerdir.
Bu, gerçek hayat veri setleriyle çalışırken faydalı olabilir; zira bir formattan diğerine dönüştürme sırasında her zaman uygun boşluklar korunmayabilir.
str_space = ' '
str_space.isspace()
True
str_tab = '\t'
str_tab.isspace()
True
str_nextline = '''\n'''
str_nextline.isspace()
True
Not: Yukarıda gördüğünüz \t, \n'yi fark ettiniz mi? Bunlara kaçış karakterleri denir. Bir \ (ters eğik çizgi) ile başlarlar. İçsel olarak normal string'ler olarak değil, başka bir şeyi temsil eden özel karakterler olarak yorumlanırlar. Örneğin - \t bir sekmeyi temsil eder. Daha birçok kaçış karakteri vardır ve bunlar hakkında daha fazlasını Python Regex eğitimimizde okuyabilirsiniz.
str.lstrip(): string'in başındaki tüm boşlukları kaldırır. Gerçek hayat veri setleriyle çalışırken işe yarayabilecek bir başka fonksiyondur.
str1 = " I can't hear you. Are you alright? "
str2 = " Yes, all is good."
str3 = str1.lstrip() + str2.lstrip()
print(str3)
I can't hear you. Are you alright? Yes, all is good.
str.isdigit(): string yalnızca rakam içeriyorsaTrue, aksi haldeFalsedöndürür.
number_string = "1020304050"
number_string.isdigit()
True
str.replace(substring, new): string içindeki alt string'in tüm oluşumlarını yenisiyle değiştirir. Ayrıca en fazlamaxsayıda oluşumu değiştiren üçüncü bir argümanmaxtanımlayabilirsiniz. Bunun yerinde (in-place) bir değiştirme olmadığını, yani değiştirilemez özelliğin hâlâ geçerli olduğunu ve aslında yeni bir string oluşturulduğunu unutmayın.
string1 = 'hip hip hurray! hip hip hurray! hip hip hurray!'
string2 = string1.replace('hip', 'Hip')
print(string1)
print(string2)
hip hip hurray! hip hip hurray! hip hip hurray!
Hip Hip hurray! Hip Hip hurray! Hip Hip hurray!
string1.replace('hip', 'Hip', 2)
'Hip Hip hurray! hip hip hurray! hip hip hurray!'
str.split(delimiter=""): string'i ayırıcıya (verilmezse boşluk) göre böler ve alt string'lerin bir listesini döndürür.
dessert = 'Cake, Cookie, Icecream'
list_dessert = string1.split(',')
Python'daki string yöntemlerinin kapsamlı bir listesini burada bulabilirsiniz.
String Biçimlendirme
Python bir string'i biçimlendirmek için birden fazla yöntemi destekler. Bu bölümde, string biçimlendirme hakkında daha fazlasını öğreneceksiniz!
% Biçimlendirme
Modül %, Python'da yerleşik bir işlemdir. Aradeğer yerleştirme operatörü olarak bilinir. Biçimlendirilecek veya dönüştürülecek veri türünü belirten %'i sağlamanız gerekir. % işlemi daha sonra '%datatype' ifadesini belirtilen veri türünde sıfır veya daha fazla öğe ile değiştirir:
print("I bought %d Euro worth of %s!" %(200, 'cookies'))
I bought 200 Euro worth of cookies!
%d'nin tamsayılar için ve %s'nin string'ler için kullanıldığını gördünüz. Mevcut diğer dönüşüm türlerinden bazıları şunlardır: sekizlik değerler için o, onaltılık için x, kayan noktalı ondalık biçim için f, tek karakter için c (tamsayı veya tek karakterlik string kabul eder).
Formatter sınıfı
formatter sınıfı yerleşik string sınıflarından biridir. format() yöntemiyle karmaşık değişken yerleştirmeleri ve değer biçimlendirmeleri yapma olanağı sağlar. İçerdiği genel yöntemleri (format(), vformat()) yeniden yazarak kendi string biçimlendirme davranışlarınızı oluşturup özelleştirmenize izin verir. Alt sınıflar tarafından değiştirilmesi amaçlanan bazı yöntemleri vardır: parse(), get_field(), get_value(), check_unused_args(), format_field() ve convert_field(). Ancak sadelik adına, burada yalnızca en yaygın kullanılan format() fonksiyonunu uygulamada göreceksiniz...
print("I bought {0} Euro worth of {1}!".format(200,'cookies')) #Konuma göre değerlere erişim
I bought 200 Euro worth of cookies!
print("I bought {total} Euro worth of {item}!".format(total = 200, item = 'cookies')) #Ada göre değerlere erişim
I bought 200 Euro worth of cookies!
'{:#<10}'.format('Cake') #"Cake" kelimesi için sola hizalama, boşluklar '#' ile doldurulur
'Cake######'
'{:#^10}'.format('Cake') #"Cake" kelimesi için ortalama, boşluklar '#' ile doldurulur
'###Cake###'
'{:#>10}'.format('Cake') #"Cake" kelimesi için sağa hizalama, boşluklar '#' ile doldurulur
'######Cake'
for num in range(1,10):
print('{0:{width}}'.format(num, width=5), end=' ')
1 2 3 4 5 6 7 8 9
Şablon String'ler
Normal % tabanlı yerleştirmeler yerine, şablonlar $ tabanlı yerleştirmeleri destekler. Python 2.4 sürümünde şablonların eklenmesinin nedeni, % string biçimlendirmenin güçlü ve zengin olmasına rağmen hataya açık ve '%' sonrasında gelen biçimler açısından oldukça katı olması, dolayısıyla karmaşık hale gelmesidir. % biçimlendirmede yaygın bir hata, sonda gelen biçim karakterini unutmak, örneğin: %(variabl)e'deki e.
Şablonların içinde tanımlı bazı yöntemler vardır: substitute() ve safe_substitute(). Bunları şu şekilde kullanabilirsiniz:
from string import Template #Önce 'Template' sınıfını içe aktarmanız gerekir
money = dict(who = 'You', to_whom = 'baker')
Template('$who owe the $to_whom a total of $$100').substitute(money)
'You owe the baker a total of $100'
Yukarıdaki örnekteki $$'i fark ettiniz mi?
Şablonlarda $$ bir kaçış karakteridir ve tek bir $ ile değiştirilir. Bu, şablonların kurallarından biridir. Şablonlar için bir diğer kural, tanımlayıcıyı şablon içinde nasıl belirlediğinizdir; alışılmış söz dizimi $identifier'dır, ancak ${identifier} da vardır.
Yani ${identifier}, $identifier ile aynıdır; ancak şu gibi senaryolarda kullanılabilir:
word = dict(noun = 'feed')
Template('Please don\'t stop ${noun}ing me').substitute(word)
"Please don't stop feeding me"
substitute() ve safe_substitute()'ı nasıl kullanabileceğinizi görelim.
fact = Template('$alter_ego is weak but wait till he transforms to $superhero!')
fact.substitute(alter_ego='Bruce Banner', superhero='Hulk')
'Bruce Banner is weak but wait till he transforms to Hulk!'
hero = dict(alter_ego='Peter Parker')
fact.substitute(hero)
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-244-c82f6a2ebc02> in <module>()
1 hero = dict(alter_ego='Peter Parker')
----> 2 fact.substitute(hero)
~/anaconda3/envs/tensorflow/lib/python3.5/string.py in substitute(*args, **kws)
127 raise ValueError('Unrecognized named group in pattern',
128 self.pattern)
--> 129 return self.pattern.sub(convert, self.template)
130
131 def safe_substitute(*args, **kws):
~/anaconda3/envs/tensorflow/lib/python3.5/string.py in convert(mo)
117 named = mo.group('named') or mo.group('braced')
118 if named is not None:
--> 119 val = mapping[named]
120 # We use this idiom instead of str() because the latter will
121 # fail if val is a Unicode containing non-ASCII characters.
KeyError: 'superhero'
Yukarıdaki örnek hata veriyor; çünkü superhero tanımlı değil. Ancak, şunu deneyin...
fact.safe_substitute(hero)
'Peter Parker is weak but wait till he transforms to $superhero!'
safe_substitute(), şablon kullanmanın avantajlarından biridir.
Neden bu kadar çok string biçimlendirme seçeneği var, diye sorabilirsiniz?
Aslında bu, öncelikle söz dizimi tercihleri meselesidir. Genellikle sadelik ile ayrıntılılık arasında bir ödünleşime ve mevcut söz dizimlerine aşinalığınıza bağlıdır. Örneğin, string biçimlendirme için % kullanmak, C programlama geçmişi olanlara doğal gelecektir. Python'daki şablonlar yazması basittir; format() kullanımı ise daha ayrıntılı olabilir ama daha fazla özelliğe sahiptir.
Biçimlendirilmiş String Literal (f-string)
Bu, Python 3.6 sürümüne eklenen bir diğer string biçimlendirme yöntemidir. Biçimlendirilmiş string literal veya f-string, başına 'f' veya 'F' getirilen string literal'ıdır. String'inizde kullanılacak tanımlayıcıları süslü parantezler { } içinde belirtebilirsiniz.
Neden bir başka string biçimlendirme seçeneği daha? Pratiklik ve sadelik güzeldir de ondan!
Aşağıdaki örneklere göz atın; f-string'lerin neden Python'da string biçimlendirmek için en basit ve en pratik yol olduğunu görün.
alter_ego = 'Peter Parker'
superhero = 'spiderman'
f'{alter_ego} is weak but wait till he transforms to {superhero}!'
Not: Yukarıdaki kod yalnızca Python 3.6 ve üstü sürümlerde çalışır. Yüklü Python sürümünüzü kontrol etmek için terminalde: python -V yazın. Ya da Python içinde sys modülünü de kullanabilirsiniz. Bunu kullanmak için şunları yapın:
import sys
sys.version
Biçimlendirilmiş string'ler, çalışma zamanında değerlendirilen ifadelerdir; bu da f-string'lerin süslü parantezleri içine herhangi bir Python ifadesini yazabileceğiniz anlamına gelir; bu da f-string kullanmanın bir diğer büyük avantajıdır.
f'{alter_ego} is weak but wait till he transforms to {superhero.capitalize()}!'
F-string harika değil mi! Ama durun, dahası da var... f-string'ler, önceki üç yönteme kıyasla daha da hızlıdır. Bunun nedeni, önceden ayrıştırılıp daha hızlı yürütme için verimli bayt kodunda saklanmalarıdır.
Doğru İpleri Çekin!
Eğitimin sonuna geldiniz, tebrikler! String'lerin ne olduğunu gördünüz, string dilimlemeyi öğrendiniz ve string'ler üzerinde yapılabilecek bazı işlemleri incelediniz. Ayrıca string'leri biçimlendirmenin bir dizi yolunu da gördünüz. Ancak unutmayın, herhangi bir tekniğe hâkim olmanın anahtarı pratiktir!
String'ler, Python'daki çeşitli veri türlerinden yalnızca biridir. Listeler, sözlükler, demetler ve kümeler hakkında daha fazla bilgi edinmek için DataCamp'in Data Types for Data Science kursuna göz atın. Bu kursta veri türleri konusundaki bilginizi kullanacaksınız. Chicago metropol alanına ait toplu taşıma verileriyle veri bilimi amaçlı çalışacaksınız. Gidip kendiniz görün...
