Python String İşlemleri - Detaylı Rehber
Giriş
Bu derste Python'da string (metin) veri tipini detaylı olarak öğreneceğiz. Stringler, programlamada en çok kullanılan veri tiplerinden biridir ve Python'da çok güçlü metodlara sahiptir. Index mantığını iyice anlayarak, en çok kullanılan string metodlarını öğreneceğiz.
String Nedir?
String, karakterlerden oluşan sıralı (sequence) bir veri yapısıdır. Python'da stringler immutable (değiştirilemez) veri tipleridir.
# String oluşturma yöntemleri
metin1 = "Merhaba Dünya"
metin2 = 'Python Programlama'
metin3 = """Çok satırlı
string örneği"""
metin4 = str(123) # Sayıyı string'e çevirme
print(f"metin1: {metin1}")
print(f"metin2: {metin2}")
print(f"metin3: {metin3}")
print(f"metin4: {metin4}")
print(f"metin4 tipi: {type(metin4)}") # <class 'str'>
Index Mantığı - Temel Kavram
Index Nedir?
Index, string içindeki karakterlerin pozisyon numarasıdır. Python'da indexleme 0'dan başlar.
metin = "Python"
# Index: 012345
print(metin[0]) # 'P' (ilk karakter)
print(metin[1]) # 'y'
print(metin[2]) # 't'
print(metin[3]) # 'h'
print(metin[4]) # 'o'
print(metin[5]) # 'n' (son karakter)
Negatif Index
Python'da negatif index kullanarak sondan başlayarak karakterlere erişebiliriz:
metin = "Python"
# Pozitif index: 0 1 2 3 4 5
# Negatif index: -6 -5 -4 -3 -2 -1
print(metin[-1]) # 'n' (son karakter)
print(metin[-2]) # 'o'
print(metin[-3]) # 'h'
print(metin[-4]) # 't'
print(metin[-5]) # 'y'
print(metin[-6]) # 'P' (ilk karakter)
Index Hatası
Var olmayan bir indexe erişmeye çalışırsak IndexError alırız:
metin = "Python"
# print(metin[6]) # IndexError: string index out of range
# print(metin[-7]) # IndexError: string index out of range
# Güvenli erişim için kontrol
if len(metin) > 6:
print(metin[6])
else:
print("Bu index mevcut değil!")
String Uzunluğu
len() fonksiyonu ile string'in uzunluğunu öğrenebiliriz:
metin = "Python Programlama"
uzunluk = len(metin)
print(f"'{metin}' string'inin uzunluğu: {uzunluk}")
# Boş string
bos_string = ""
print(f"Boş string uzunluğu: {len(bos_string)}") # 0
String Slicing (Dilimleme)
Slicing, string'in belirli bir kısmını almamızı sağlar. Format: string[başlangıç:bitiş:adım]
Temel Slicing
metin = "Python Programlama"
# Temel slicing
print(metin[0:6]) # "Python" (0'dan 6'ya kadar, 6 dahil değil)
print(metin[7:18]) # "Programlama"
print(metin[:6]) # "Python" (baştan 6'ya kadar)
print(metin[7:]) # "Programlama" (7'den sona kadar)
print(metin[:]) # "Python Programlama" (tamamı)
# Tek karakter alma
print(metin[0]) # "P"
print(metin[1]) # "y"
Negatif Index ile Slicing
metin = "Python Programlama"
# Negatif index ile slicing
print(metin[-11:]) # "Programlama" (sondan 11 karakter)
print(metin[:-11]) # "Python " (sondan 11 karakter hariç)
print(metin[-18:-12]) # "Python" (sondan 18'den 12'ye kadar)
print(metin[-6:]) # "Python" (sondan 6 karakter)
Adım (Step) Kullanımı
metin = "Python Programlama"
# Adım kullanımı
print(metin[::2]) # "Pto rgamlaa" (2'şer atlayarak)
print(metin[1::2]) # "yhnPorma" (1'den başlayarak 2'şer atlayarak)
print(metin[::3]) # "Ph rgaa" (3'er atlayarak)
print(metin[::4]) # "P rga" (4'er atlayarak)
# Negatif adım (tersten)
print(metin[::-1]) # "amalmargoP nohtyP" (tersten)
print(metin[::-2]) # "aalgro nhP" (tersten 2'şer atlayarak)
Pratik Slicing Örnekleri
metin = "Python Programlama Dili"
# İlk kelimeyi al
ilk_kelime = metin[:6]
print(f"İlk kelime: {ilk_kelime}") # Python
# Son kelimeyi al
son_kelime = metin[-4:]
print(f"Son kelime: {son_kelime}") # Dili
# Ortadaki kelimeyi al
orta_kelime = metin[7:18]
print(f"Orta kelime: {orta_kelime}") # Programlama
# Her kelimenin ilk harfini al
ilk_harfler = metin[0] + metin[7] + metin[19]
print(f"İlk harfler: {ilk_harfler}") # PPD
En Çok Kullanılan String Metodları
1. Büyük/Küçük Harf Dönüşümleri
metin = "Python Programlama"
print(metin.upper()) # "PYTHON PROGRAMLAMA"
print(metin.lower()) # "python programlama"
print(metin.title()) # "Python Programlama"
print(metin.capitalize()) # "Python programlama"
print(metin.swapcase()) # "pYTHON pROGRAMLAMA"
# Pratik örnek
isim = "ali veli"
buyuk_isim = isim.title()
print(buyuk_isim) # "Ali Veli"
2. Arama Metodları
find() ve index()
metin = "Python programlama dili çok güçlüdür"
# find() - karakter/kelime arama (bulamazsa -1 döner)
print(metin.find("programlama")) # 7
print(metin.find("Java")) # -1 (bulunamadı)
print(metin.find("a", 10)) # 10'dan sonra "a" ara
print(metin.find("a", 10, 20)) # 10-20 arasında "a" ara
# index() - karakter/kelime arama (bulamazsa hata verir)
print(metin.index("programlama")) # 7
# print(metin.index("Java")) # ValueError
# Güvenli arama
def guvenli_ara(metin, aranan):
pozisyon = metin.find(aranan)
if pozisyon != -1:
return f"'{aranan}' {pozisyon}. pozisyonda bulundu"
else:
return f"'{aranan}' bulunamadı"
print(guvenli_ara(metin, "programlama"))
print(guvenli_ara(metin, "Java"))
count() - Sayma
metin = "Python programlama dili çok güçlüdür"
# count() - kaç kez geçtiğini sayma
print(metin.count("a")) # 3
print(metin.count("programlama")) # 1
print(metin.count("o")) # 4
print(metin.count("x")) # 0
# Belirli aralıkta sayma
print(metin.count("a", 0, 10)) # 0-10 arasında "a" sayısı
print(metin.count("o", 10, 20)) # 10-20 arasında "o" sayısı
3. Değiştirme Metodları
replace() - Değiştirme
metin = "Python programlama dili çok güçlüdür"
# Basit değiştirme
yeni_metin = metin.replace("Python", "Java")
print(yeni_metin) # "Java programlama dili çok güçlüdür"
# Birden fazla değiştirme
metin2 = "Python Python Python"
yeni_metin2 = metin2.replace("Python", "Java", 2) # Sadece ilk 2'sini değiştir
print(yeni_metin2) # "Java Java Python"
# Karakter değiştirme
metin3 = "Python"
yeni_metin3 = metin3.replace("o", "0")
print(yeni_metin3) # "Pyth0n"
# Pratik örnek - Şifreleme
def basit_sifrele(metin):
sifreli = metin.replace("a", "@")
sifreli = sifreli.replace("e", "3")
sifreli = sifreli.replace("i", "1")
sifreli = sifreli.replace("o", "0")
return sifreli
print(basit_sifrele("merhaba")) # "m3rh@b@"
4. Boşluk ve Karakter Temizleme
metin = " Python Programlama "
print(f"Orijinal: '{metin}'")
print(f"strip(): '{metin.strip()}'") # Başından ve sonundan boşlukları temizle
print(f"lstrip(): '{metin.lstrip()}'") # Sadece başından boşlukları temizle
print(f"rstrip(): '{metin.rstrip()}'") # Sadece sonundan boşlukları temizle
# Belirli karakterleri temizleme
metin2 = "***Python***"
print(f"Orijinal: '{metin2}'")
print(f"strip('*'): '{metin2.strip('*')}'") # "*" karakterlerini temizle
metin3 = "...Python..."
print(f"strip('.'): '{metin3.strip('.')}'") # "." karakterlerini temizle
# Pratik örnek - Kullanıcı girdisi temizleme
def temizle_girdi(girdi):
return girdi.strip().lower()
kullanici_girdi = " PYTHON "
temiz_girdi = temizle_girdi(kullanici_girdi)
print(f"Temizlenmiş: '{temiz_girdi}'") # 'python'
5. Bölme ve Birleştirme
split() - Bölme
# Boşluklara göre bölme
cumle = "Python programlama dili"
kelimeler = cumle.split()
print(kelimeler) # ['Python', 'programlama', 'dili']
# Belirli karaktere göre bölme
veriler = "Ali,25,İstanbul"
kisiler = veriler.split(",")
print(kisiler) # ['Ali', '25', 'İstanbul']
# Maksimum bölme sayısı
metin = "Python:Java:C++:JavaScript"
diller = metin.split(":", 2) # Sadece ilk 2 ":" karakterine göre böl
print(diller) # ['Python', 'Java', 'C++:JavaScript']
# Satır sonlarına göre bölme
cok_satirli = """Python
Java
C++"""
satirlar = cok_satirli.splitlines()
print(satirlar) # ['Python', 'Java', 'C++']
join() - Birleştirme
# Liste elemanlarını birleştirme
kelimeler = ['Python', 'programlama', 'dili']
cumle = " ".join(kelimeler)
print(cumle) # "Python programlama dili"
# Farklı ayraçlarla birleştirme
sayilar = ['1', '2', '3', '4', '5']
print("-".join(sayilar)) # "1-2-3-4-5"
print("".join(sayilar)) # "12345"
print(" | ".join(sayilar)) # "1 | 2 | 3 | 4 | 5"
# Karakter listesini birleştirme
karakterler = ['P', 'y', 't', 'h', 'o', 'n']
kelime = "".join(karakterler)
print(kelime) # "Python"
# Pratik örnek - CSV formatı
def liste_to_csv(liste):
return ",".join([str(eleman) for eleman in liste])
sayilar = [1, 2, 3, 4, 5]
csv_format = liste_to_csv(sayilar)
print(csv_format) # "1,2,3,4,5"
6. Kontrol Metodları
# Temel kontrol metodları
metin1 = "Python123"
metin2 = "PYTHON"
metin3 = "python"
metin4 = "12345"
metin5 = "Python Programlama"
metin6 = ""
metin7 = " "
print(f"'{metin1}' isalpha(): {metin1.isalpha()}") # False (rakam var)
print(f"'{metin2}' isalpha(): {metin2.isalpha()}") # True
print(f"'{metin3}' islower(): {metin3.islower()}") # True
print(f"'{metin2}' isupper(): {metin2.isupper()}") # True
print(f"'{metin4}' isdigit(): {metin4.isdigit()}") # True
print(f"'{metin5}' istitle(): {metin5.istitle()}") # True
print(f"'{metin6}' isspace(): {metin6.isspace()}") # False
print(f"'{metin7}' isspace(): {metin7.isspace()}") # True
print(f"'{metin1}' isalnum(): {metin1.isalnum()}") # True (harf ve rakam)
# Pratik örnek - Şifre kontrolü
def sifre_kontrol(sifre):
if len(sifre) < 8:
return "Şifre en az 8 karakter olmalı"
elif not any(harf.isupper() for harf in sifre):
return "Şifre en az bir büyük harf içermeli"
elif not any(harf.islower() for harf in sifre):
return "Şifre en az bir küçük harf içermeli"
elif not any(harf.isdigit() for harf in sifre):
return "Şifre en az bir rakam içermeli"
else:
return "Şifre geçerli"
print(sifre_kontrol("python")) # Şifre en az 8 karakter olmalı
print(sifre_kontrol("Python123")) # Şifre geçerli
Pratik String Örnekleri
1. Palindrom Kontrolü
def palindrom_mu(kelime):
# Büyük/küçük harf duyarlılığını kaldır
kelime = kelime.lower()
# Sadece harfleri al
temiz_kelime = ""
for karakter in kelime:
if karakter.isalpha():
temiz_kelime += karakter
# Tersten kontrol et
return temiz_kelime == temiz_kelime[::-1]
# Test
print(palindrom_mu("radar")) # True
print(palindrom_mu("Python")) # False
print(palindrom_mu("A man a plan a canal Panama")) # True
print(palindrom_mu("12321")) # True
2. Kelime Sayma
def kelime_say(cumle):
# Boşluklara göre böl
kelimeler = cumle.split()
return len(kelimeler)
def detayli_kelime_analizi(cumle):
kelimeler = cumle.split()
return {
'toplam_kelime': len(kelimeler),
'en_uzun_kelime': max(kelimeler, key=len) if kelimeler else "",
'en_kisa_kelime': min(kelimeler, key=len) if kelimeler else "",
'ortalama_uzunluk': sum(len(kelime) for kelime in kelimeler) / len(kelimeler) if kelimeler else 0
}
# Test
cumle = "Python programlama dili çok güçlüdür"
print(f"'{cumle}' cümlesinde {kelime_say(cumle)} kelime var")
analiz = detayli_kelime_analizi(cumle)
for key, value in analiz.items():
print(f"{key}: {value}")
3. Karakter Frekans Analizi
def karakter_frekansi(metin):
frekans = {}
for karakter in metin.lower():
if karakter.isalpha():
if karakter in frekans:
frekans[karakter] += 1
else:
frekans[karakter] = 1
return frekans
def en_cok_gecen_karakter(metin):
frekans = karakter_frekansi(metin)
if frekans:
en_cok = max(frekans.items(), key=lambda x: x[1])
return en_cok
return None
# Test
metin = "Python programlama"
frekans = karakter_frekansi(metin)
print("Karakter frekansları:")
for harf, sayi in sorted(frekans.items()):
print(f"'{harf}': {sayi}")
en_cok = en_cok_gecen_karakter(metin)
if en_cok:
print(f"En çok geçen karakter: '{en_cok[0]}' ({en_cok[1]} kez)")
4. String Şifreleme
def caesar_sifrele(metin, kaydirma):
sonuc = ""
for karakter in metin:
if karakter.isalpha():
# Büyük harf kontrolü
if karakter.isupper():
yeni_ascii = ord('A') + (ord(karakter) - ord('A') + kaydirma) % 26
else:
yeni_ascii = ord('a') + (ord(karakter) - ord('a') + kaydirma) % 26
sonuc += chr(yeni_ascii)
else:
sonuc += karakter
return sonuc
def caesar_coz(metin, kaydirma):
return caesar_sifrele(metin, -kaydirma)
# Test
orijinal = "Hello World!"
sifreli = caesar_sifrele(orijinal, 3)
cozulmus = caesar_coz(sifreli, 3)
print(f"Orijinal: {orijinal}")
print(f"Şifreli: {sifreli}")
print(f"Çözülmüş: {cozulmus}")
5. Email Formatı Kontrolü
def email_kontrol(email):
# Basit email kontrolü
if '@' not in email or '.' not in email:
return False
# @ işaretinden önce ve sonra karakter olmalı
parcalar = email.split('@')
if len(parcalar) != 2:
return False
kullanici_adi, domain = parcalar
if len(kullanici_adi) < 1 or len(domain) < 1:
return False
# Domain'de en az bir nokta olmalı
if '.' not in domain:
return False
return True
# Test
emails = ["test@example.com", "invalid-email", "user@domain", "@domain.com", "user@.com"]
for email in emails:
print(f"'{email}': {'Geçerli' if email_kontrol(email) else 'Geçersiz'}")
Pratik Alıştırmalar
Alıştırma 1: Bir string'deki sesli harf sayısını bulan fonksiyon yazın.
def sesli_harf_say(metin):
sesli_harfler = "aeıioöuüAEIİOÖUÜ"
sayac = 0
for karakter in metin:
if karakter in sesli_harfler:
sayac += 1
return sayac
# Test
print(sesli_harf_say("Python programlama")) # 5
Alıştırma 2: String'i tersten yazdıran fonksiyon yazın.
def ters_yazdir(metin):
return metin[::-1]
# Test
print(ters_yazdir("Python")) # nohtyP
Alıştırma 3: İki string'in anagram olup olmadığını kontrol eden fonksiyon yazın.
def anagram_mu(str1, str2):
# Büyük/küçük harf duyarlılığını kaldır ve sırala
return sorted(str1.lower()) == sorted(str2.lower())
# Test
print(anagram_mu("listen", "silent")) # True
print(anagram_mu("python", "java")) # False
Alıştırma 4: String'den sadece rakamları çıkaran fonksiyon yazın.
def rakamlari_cikar(metin):
return ''.join(karakter for karakter in metin if karakter.isdigit())
# Test
print(rakamlari_cikar("Python123Programlama456")) # 123456
Alıştırma 5: String'deki her kelimenin ilk harfini büyük yapan fonksiyon yazın.
def baslik_formatla(metin):
return metin.title()
# Test
print(baslik_formatla("python programlama dili")) # Python Programlama Dili
İleri Seviye String İşlemleri
Regular Expression (Regex) Temelleri
import re
# Basit regex örnekleri
metin = "Python 3.9 ve Python 2.7"
# Sayıları bul
sayilar = re.findall(r'\d+', metin)
print(sayilar) # ['3', '9', '2', '7']
# Python versiyonlarını bul
versiyonlar = re.findall(r'Python \d+\.\d+', metin)
print(versiyonlar) # ['Python 3.9', 'Python 2.7']
# Email kontrolü (regex ile)
def email_kontrol_regex(email):
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
return re.match(pattern, email) is not None
# Test
print(email_kontrol_regex("test@example.com")) # True
print(email_kontrol_regex("invalid-email")) # False
String Formatlama
# f-string (Python 3.6+)
isim = "Ali"
yas = 25
print(f"{isim} {yas} yaşında")
# format() metodu
print("{} {} yaşında".format(isim, yas))
# % operatörü (eski stil)
print("%s %d yaşında" % (isim, yas))
# Pratik örnek
def kisi_bilgisi(isim, yas, sehir):
return f"Adı: {isim}, Yaşı: {yas}, Şehri: {sehir}"
print(kisi_bilgisi("Ali", 25, "İstanbul"))
Genel Pratik Projeleri
Proje 1: Basit Metin Editörü
- Metin girme ve düzenleme
- Kelime/karakter sayma
- Arama ve değiştirme
- Büyük/küçük harf dönüştürme
Proje 2: Şifreleme Uygulaması
- Caesar şifreleme
- Vigenère şifreleme
- Şifre çözme
Proje 3: Metin Analiz Aracı
- Kelime frekans analizi
- Karakter istatistikleri
- Okunabilirlik skoru
Proje 4: Dosya İşleme Sistemi
- Dosya içeriğini okuma
- Metin analizi
- Rapor oluşturma
Proje 5: Veri Doğrulama Sistemi
- Email format kontrolü
- Telefon numarası kontrolü
- TC kimlik kontrolü
Özet
Bu rehberde Python'da string işlemleri hakkında detaylı bilgi edindiniz:
Temel Kavramlar:
- Index mantığı: 0'dan başlayan pozisyon numaraları
- Negatif index: Sondan başlayarak erişim
- Slicing: Belirli kısımları alma
- Immutable: Stringler değiştirilemez
En Çok Kullanılan Metodlar:
- Büyük/küçük harf: upper(), lower(), title(), capitalize()
- Arama: find(), index(), count()
- Değiştirme: replace()
- Temizleme: strip(), lstrip(), rstrip()
- Bölme/Birleştirme: split(), join()
- Kontrol: isalpha(), isdigit(), isupper(), islower()
Pratik Uygulamalar:
- Palindrom kontrolü
- Kelime sayma
- Karakter frekans analizi
- String şifreleme
- Email format kontrolü
ÖNEMLİ: Index mantığını iyice anlayın - 0'dan başlar ve negatif indexler sondan başlar!
Her bölümdeki pratik alıştırmaları yaparak konuları pekiştirin ve projelerle gerçek uygulamalar geliştirin.