Python'da string (metin) işlemleri: split, replace, strip, join, dilimleme ve f-metinler
Python'da string (str) tipi Unicode karakterlerden oluşan değiştirilemez bir dizidir. split() metni listeye böler, join() listeyi tekrar birleştirir, replace() alt metni değiştirir, strip() kenarlardaki boşlukları siler; her metot yeni bir string döndürür. Değerleri yazdırmanın en kolay yolu f-string'dir: f"{name}: {price:.2f}".
Python'da stringler her programda karşınıza çıkar: kullanıcı girdisi, dosya adları, CSV satırları, API yanıtları. str tipi metni Unicode olarak tutar, bu yüzden Türkçe karakterler ve emojiler ek ayar gerektirmeden çalışır. En çok kullanılan metotlar split, replace, strip ve join'dir; değerleri yazdırmak için ise en uygun araç f-string'lerdir. Hepsini örneklerle inceleyelim.
Python'da string nasıl çalışır
Stringler tek ya da çift tırnakla yazılır; fark yoktur: 'kahve' ile "kahve" aynıdır. Üç tırnakla yazılan metin birden fazla satır olabilir ve satır sonları olduğu gibi korunur.
name = "Kahve"
note = """İlk satır
İkinci satır"""
print(len(name)) # 4 — karakter cinsinden uzunluk
Stringlerin temel özelliği değiştirilemez olmalarıdır. Bir metot stringi değiştirmez, yeni bir string döndürür. Bu yüzden s.replace("a", "b") tek başına bir şey yapmaz; s = s.replace("a", "b") yazmanız gerekir. Yeni başlayanların en sık yaptığı hata budur.
Özel karakterler, satır sonu ve ham stringler
Satır sonu \n, sekme \t, ters eğik çizgi \\ ile yazılır. Başına r konan string "ham" (raw) olur: içindeki ters eğik çizgiler işlenmez. Bu, Windows yolları ve düzenli ifadeler için kullanışlıdır.
print("Toplam:\n350 TL")
path = r"C:\new\table.csv" # \n ve \t özel karaktere dönüşmez
Uzun bir ifadeyi parantez içinde birden fazla satıra bölebilirsiniz; parantez içindeki yan yana string sabitlerini Python kendisi birleştirir.
split: metni listeye bölmek
split() metni bir ayraca göre böler ve liste döndürür. Argüman verilmezse her türlü boşluk karakterinden böler ve yinelenen boşlukları yok sayar; komutları ayrıştırırken çok işe yarar.
"ekle Kahve 250".split() # ['ekle', 'Kahve', '250']
"2026-10-16".split("-") # ['2026', '10', '16']
"a,b,,c".split(",") # ['a', 'b', '', 'c']
"anahtar=değer=x".split("=", 1) # ['anahtar', 'değer=x']
Dikkat edin: açık bir ayraçla bölünce boş parçalar korunur. İkinci argüman maxsplit kesim sayısını sınırlar; rsplit() ise sağdan böler. Metni satırlara ayırmak için splitlines() kullanın: hem \n hem de \r\n satır sonlarını tanır ve sonda boş öğe bırakmaz.
text = "kahve\ntaksi\n"
text.split("\n") # ['kahve', 'taksi', '']
text.splitlines() # ['kahve', 'taksi']
join: listeyi stringe birleştirmek
join() ters işlemdir. Ayraç olan stringde çağrılır ve argüman olarak string listesi alır:
items = ["kahve", "taksi", "öğle yemeği"]
print(", ".join(items)) # kahve, taksi, öğle yemeği
print("\n".join(items)) # her öğe ayrı satırda
Tüm öğeler string olmalıdır; aksi halde TypeError: sequence item 0: expected str instance, int found hatası alırsınız. Sayıları önce çevirin: ", ".join(str(x) for x in amounts).
Birleştirme ve ekleme
İki stringi + ile toplayabilir, * ile tekrarlayabilirsiniz: "-" * 20. Ancak döngü içinde yüzlerce parçayı += ile eklemek yavaştır, çünkü her seferinde yeni bir string oluşur. Parçaları bir listeye toplayıp tek bir join() ile birleştirin. Bir stringi sayıyla doğrudan toplayamazsınız: "Toplam: " + 5 bir TypeError verir; str() fonksiyonunu ya da f-string'i kullanın.
replace: alt metni değiştirmek
replace(eski, yeni) bir alt metnin tüm geçtiği yerleri değiştirir. Üçüncü argüman değiştirme sayısını sınırlar.
price = "1.250,50"
price = price.replace(".", "").replace(",", ".")
print(float(price)) # 1250.5
"a-b-c".replace("-", "+", 1) # 'a+b-c'
Metot büyük-küçük harfe duyarlıdır ve tam eşleşme arar. Desene göre değiştirme (örneğin "bütün rakamlar") için re modülü ve re.sub() fonksiyonu gerekir.
strip, lstrip, rstrip: kenarları kırpmak
strip() iki uçtaki boşlukları, sekmeleri ve satır sonlarını siler. lstrip() yalnızca soldan, rstrip() yalnızca sağdan kırpar. Kullanıcı girdisi ve dosyadan gelen satırlarla yapılacak ilk iş budur.
raw = " Kahve \n"
raw.strip() # 'Kahve'
raw.rstrip() # ' Kahve'
"xxKahvexx".strip("x") # 'Kahve'
Argüman bir alt metin değil, karakter kümesidir: "abcMetinabc".strip("abc") uçlardaki a, b ve c karakterlerinin hepsini, sırası ne olursa olsun, siler. Yalnızca bir önek ya da sonek kesmek istiyorsanız removeprefix() ve removesuffix() kullanın (Python 3.9'dan itibaren).
Diğer kullanışlı string metotları
| Metot | Ne yapar | Örnek → sonuç |
|---|---|---|
lower(), upper() | harf büyüklüğü | "Kahve".lower() → 'kahve' |
startswith(), endswith() | başlangıç ve bitiş kontrolü | "a.csv".endswith(".csv") → True |
find() | alt metnin konumu ya da -1 | "kahve".find("h") → 2 |
count() | geçiş sayısı | "banana".count("a") → 3 |
isdigit() | yalnızca rakam mı? | "250".isdigit() → True |
zfill() | başına sıfır ekler | "7".zfill(3) → '007' |
Bir stringin alt metin içerip içermediğini en kolay in operatörüyle kontrol edersiniz: if "kahve" in text.lower():. Stringler == ile karakter karakter ve büyük-küçük harfe duyarlı karşılaştırılır; harf duyarsız karşılaştırma için iki tarafı da casefold() ile dönüştürün.
String dilimleme
String bir dizidir; karakterlere sıfırdan başlayan indeksle erişilir, negatif indeks sondan sayar. s[başlangıç:bitiş:adım] biçimindeki dilim bir alt string döndürür; bitiş sınırı dahil değildir.
s = "Python"
s[0] # 'P'
s[-1] # 'n'
s[0:3] # 'Pyt'
s[2:] # 'thon'
s[::2] # 'Pto'
s[::-1] # 'nohtyP' — stringi ters çevirir
Dilim, sınırların dışına çıksanız da hata vermez: s[0:100] tüm stringi döndürür. Ama s[100] bir IndexError verir. Bir karakteri indeksle değiştiremezsiniz (s[0] = "J" bir TypeError verir); yeni bir string kurmanız gerekir: "J" + s[1:].
f-string'ler
String başındaki f harfi, süslü parantez içindeki ifadelerin hesaplanıp metne yerleştirileceğini belirtir. Python 3.6'dan beri metin biçimlendirmenin ana yoludur: format()'tan daha kısadır ve eski % operatöründen daha hızlıdır.
item = "Kahve"
price = 250
print(f"{item}: {price} TL") # Kahve: 250 TL
print(f"İndirimli: {price * 0.9} TL") # İndirimli: 225.0 TL
print(f"{item=}") # item='Kahve' — hata ayıklama için kullanışlı
Sayıların biçimlendirilmesi ve hizalama
Süslü parantez içinde iki nokta üst üste işaretinden sonra biçim belirleyicisi yazılır. Yuvarlama, binlik ayraçları, genişlik ve hizalamayı bu belirleyici ayarlar:
| Yazım | Sonuç | Anlamı |
|---|---|---|
f"{3.14159:.2f}" | 3.14 | 2 haneye yuvarlama |
f"{1250000:,}" | 1,250,000 | binlik ayracı |
f"{1250000:_}" | 1_250_000 | virgül yerine alt çizgi |
f"{0.256:.1%}" | 25.6% | yüzde |
f"{'kahve':<10}|" | kahve | | sola yaslı, genişlik 10 |
f"{250:>8}" | 250 | sağa yaslı |
f"{7:03d}" | 007 | başına sıfır ekleme |
Hizalama terminaldeki tablolar için uygundur: f"{name:<12}{amount:>10.2f}" sütunları tam hizalar. Biçimlendirmeyi yalnızca çıktı verirken yapın. Parayı float yerine kuruş cinsinden tam sayı (int) ya da Decimal ile tutun: 0.1 + 0.2 sonucu 0.30000000000000004 çıkar.
Tırnaklar ve f-string içinde satır sonu
Python 3.12 ile (PEP 701) f-string'ler resmi bir dilbilgisi kazandı: süslü parantez içinde dıştakiyle aynı tırnakları, ters eğik çizgileri ve satır sonlarını kullanabilirsiniz; iç içe yazım sınırı da kalktı. Parantez içindeki hatalar artık tam konumu gösteriyor. Eski sürümlerde içeride farklı tırnak türü kullanın: f"{d['key']}"; satır sonunu ise ayrı bir değişkenle ya da chr(10) ile verin.
Çok satırlı metin için üç tırnaklı f-string uygundur: f"""Toplam: {total}\nKalem sayısı: {count}""".
format() ve %: eski yöntemler
Başkalarının kodunda "{}: {}".format(item, price) ve "%s: %d" % (item, price) ile karşılaşırsınız. format() metodunun biçim belirleyicileri f-string'lerdekilerle aynıdır. format() yine de şablon veriden ayrı tutulduğunda, örneğin bir ayar dosyasında, kullanışlıdır.
Pratik örnek: satır ayrıştırmak
Metotları birlikte kullanalım. Bir dosyadan " 2026-10-16; Kahve ; 250,50 \n" gibi satırlar geldiğini ve tarihi, adı ile tutarı kuruş cinsinden almak istediğinizi varsayın. Sıra şöyledir: kenarları temizle, ayraçtan böl, her parçayı düzelt, türleri dönüştür.
line = " 2026-10-16; Kahve ; 250,50 \n"
date, item, raw_amount = [p.strip() for p in line.strip().split(";")]
amount_kop = round(float(raw_amount.replace(",", ".")) * 100)
print(date, item, amount_kop) # 2026-10-16 Kahve 25050
print(f"{item:<10}{amount_kop / 100:>10.2f}")
Parça sayısı üçten farklıysa açma işlemi ValueError: not enough values to unpack ya da too many values to unpack hatasıyla durur. Gerçek kodda bu satırları önceden kontrol edin ya da istisnayı yakalayın. Tırnak ve kaçış karakteri içeren gerçek CSV dosyaları için split yerine standart csv modülünü kullanın.
Stringlerde tipik hatalar
- Metodun sonucu kaydedilmemiş:
s.strip()tek başına hiçbir şeyi değiştirmez. - Sayı listesinde join —
TypeError; öncemap(str, ...)kullanın. - strip ile alt metin: argüman bir karakter kümesidir; önek için
removeprefix()gerekir. - Büyük-küçük harf farkı:
"Kahve" == "kahve"değeriFalse'tur. - Windows yollarında ters eğik çizgi,
röneki olmadan özel karaktere dönüşür.
t-string'ler: hazır metin yerine şablon
Python 3.14 ile t-string'ler geldi. Görünüşleri f-string'e benzer, yalnızca başlarında t vardır; ama sonuç farklıdır: hazır bir string değil, string.templatelib.Template nesnesi döner. Bu nesnede metin parçaları (.strings) ve yerleştirilen değerler (.values) ayrı ayrı tutulur.
name = "<script>"
tpl = t"Merhaba, {name}!"
print(tpl.strings) # ('Merhaba, ', '!')
print(tpl.values) # ('<script>',)
Bunun faydası şudur: bir kütüphane değerleri birleştirilmeden önce alır ve işleyebilir; örneğin HTML'de köşeli parantezleri kaçırabilir ya da SQL sorgusuna parametreyi güvenle geçirebilir. f-string bu fırsatı vermez, çünkü her şeyi hemen birleştirir. Sıradan çıktı için f-string kullanmaya devam edin.
Özet
Günlük string işleri için küçük bir metot seti yeterlidir: split() ve join() metni ayırıp birleştirir, strip() girdiyi temizler, replace() parçaları değiştirir, dilimler alt metinleri kesip alır, f-string'ler değerleri istediğiniz biçimde yazdırır. Değiştirilemezlik kuralını unutmayın: metot yeni bir string döndürür ve onu kaydetmeniz gerekir. Stringler, sayılar ve f-string'ler harcama takipçisi örneğiyle kursun Python dersinde uygulamalı olarak işlenir.
Sık sorulan sorular
Python'da bir stringin uzunluğu nasıl öğrenilir?
len(s) fonksiyonu karakter sayısını verir. Türkçe karakterler ve emojiler Unicode karakter olarak sayılır; bayt cinsinden boyut için len(s.encode("utf-8")) kullanın.
Sayıyı stringe, stringi sayıya nasıl çeviririm?
str(250) değeri '250' yapar; int("250") ve float("2.5") ise tersini yapar. String sayıya benzemiyorsa int() bir ValueError verir, bu yüzden girdiyi kontrol edin.
replace neden stringimi değiştirmiyor?
Stringler değiştirilemez; replace yeni bir string döndürür. Sonucu atayın: s = s.replace("a", "b").
Bir stringin boş olup olmadığı nasıl kontrol edilir?
Boş string False gibi davranır; if not s: yeterlidir. Metin yalnızca boşluklardan oluşabiliyorsa if not s.strip(): kullanın.
t-string ile f-string arasındaki fark nedir?
f-string hemen hazır bir str döndürür; t-string (Python 3.14+) ise metin parçalarını ve değerleri ayrı tutan bir Template nesnesi döndürür. Bu sayede veriler HTML ve SQL için güvenle kaçırılabilir.
Bu konu “Python 3.15: от новичка до профи” kursunda uygulamalı olarak ayrıntılı işleniyor.
Kursa git