Python String Fonksiyonları: Metin İşlemede Güçlü Araçlar
Giriş
Python, modern programlama dünyasının en popüler dillerinden biridir ve bu popülaritesinin önemli bir kısmı, metin (string) verileriyle çalışma konusunda sunduğu esneklik ve zengin fonksiyonaliteden kaynaklanır. Veri analizi, web geliştirme, otomasyon, yapay zeka ve daha birçok alanda, metin verilerini işlemek, temizlemek, formatlamak ve analiz etmek kritik öneme sahiptir. Python’ın string fonksiyonları ve metotları, geliştiricilere bu karmaşık görevleri basit ve etkili bir şekilde gerçekleştirmeleri için güçlü araçlar sunar. Bu makalede, Python stringlerinin temel özelliklerinden başlayarak, en yaygın kullanılan string metotlarına, gelişmiş string işlemlerine ve performans ipuçlarına kadar geniş bir yelpazeyi ele alacağız. Amacımız, Python’da metin manipülasyonu konusunda derinlemesine bir anlayış sağlamak ve okuyuculara günlük programlama ihtiyaçlarında karşılaşabilecekleri sorunlara pratik çözümler sunmaktır.
String Nedir ve Neden Önemlidir?
Programlamada “string” veya Türkçe karşılığıyla “karakter dizisi”, bir veya daha fazla karakterin sıralı bir koleksiyonudur. Bu karakterler harfler, rakamlar, semboller ve boşluklar olabilir. Python’da stringler, değişmez (immutable) veri tipleridir, yani bir string oluşturulduktan sonra içeriği doğrudan değiştirilemez. Herhangi bir değişiklik işlemi, aslında yeni bir string oluşturulmasına yol açar. Bu özellik, stringlerin güvenilirliğini ve performansını artırır.
Stringler, neredeyse her programlama uygulamasında kritik bir rol oynar:
* Kullanıcı Girişleri: Kullanıcıların adları, e-posta adresleri, şifreleri gibi metinsel girdiler string olarak işlenir.
* Veri Depolama ve Aktarımı: Veritabanlarında, dosyalarda veya ağ üzerinden aktarılan verilerin çoğu metin tabanlıdır (JSON, XML, CSV gibi formatlar).
* Web Geliştirme: HTML, CSS, JavaScript gibi web teknolojileri metin tabanlıdır. URL’ler, form verileri, sunucu yanıtları string olarak manipüle edilir.
* Veri Analizi ve Metin Madenciliği: Büyük metin kitlelerinden anlamlı bilgi çıkarmak (duygu analizi, anahtar kelime çıkarma vb.) string işlemlerini yoğun bir şekilde kullanır.
* Otomasyon ve Komut Dosyaları: Dosya yollarını düzenleme, log dosyalarını ayrıştırma, komut satırı argümanlarını işleme gibi görevlerde stringler temeldir.
Python’ın zengin string fonksiyonları kütüphanesi, bu tür işlemleri kolaylaştırarak geliştiricilerin daha verimli kod yazmasına olanak tanır.
String Oluşturma ve Temel Özellikleri
Python’da stringler, tek tırnak (‘), çift tırnak (“) veya üçlü tırnak (”’ veya “””) kullanılarak oluşturulabilir.
Tek ve Çift Tırnaklar
Tek veya çift tırnaklar, genellikle tek satırlık stringler için kullanılır. İki tırnak türü arasında işlevsel bir fark yoktur; tercih tamamen kişisel veya kurumsal kodlama standartlarına bağlıdır.
metin1 = 'Merhaba Dünya'
metin2 = "Python Programlama"
print(metin1) # Merhaba Dünya
print(metin2) # Python Programlama
Eğer string içinde tırnak kullanmanız gerekiyorsa, dış tırnaktan farklı bir tırnak türü seçebilir veya escape karakteri kullanabilirsiniz.
metin3 = "Python'ın gücü"
metin4 = 'O şöyle dedi: "Merhaba!"'
metin5 = 'Python\'ın gücü' # Escape karakteri ile
print(metin3) # Python'ın gücü
print(metin4) # O şöyle dedi: "Merhaba!"
print(metin5) # Python'ın gücü
Üçlü Tırnaklar
Üçlü tırnaklar, özellikle çok satırlı stringler veya dokümantasyon stringleri (docstrings) oluşturmak için kullanışlıdır. İçlerinde tek veya çift tırnakları escape etmeye gerek kalmadan barındırabilirler.
cok_satirli_metin = """Bu,
birden fazla
satıra yayılmış bir metindir.
İçinde 'tek' ve "çift" tırnaklar da bulunabilir."""
print(cok_satirli_metin)
Escape Karakterleri
Escape karakterleri, string içinde özel anlam taşıyan karakterleri (örneğin, yeni satır, sekme, tırnak işaretleri) temsil etmek için kullanılır. Geri eğik çizgi (\) ile başlarlar.
* \n: Yeni satır
* \t: Sekme (tab)
* \\: Geri eğik çizgi
* \': Tek tırnak
* \": Çift tırnak
escape_ornek = "Bu bir satır.\nBu da ikinci satır.\tBir sekme boşluk."
print(escape_ornek)
Raw Stringler (Ham Stringler)
Eğer string içindeki geri eğik çizgilerin escape karakteri olarak yorumlanmasını istemiyorsanız (örneğin dosya yollarında), stringin başına r veya R koyarak ham string (raw string) oluşturabilirsiniz.
dosya_yolu = r"C:\Users\Kullanıcı\Belgeler\dosya.txt"
print(dosya_yolu) # C:\Users\Kullanıcı\Belgeler\dosya.txt
String Birleştirme (Concatenation)
Stringler, + operatörü veya f-stringler/.format() metodu ile birleştirilebilir.
ad = "Ahmet"
soyad = "Yılmaz"
tam_ad = ad + " " + soyad
print(tam_ad) # Ahmet Yılmaz
mesaj = "Merhaba, benim adım " + ad + "."
print(mesaj) # Merhaba, benim adım Ahmet.
String Tekrarlama (Repetition)
Stringler, * operatörü ile tekrarlanabilir.
tekrar = "Merhaba " * 3
print(tekrar) # Merhaba Merhaba Merhaba
cizgi = "-" * 20
print(cizgi) # --------------------
String Dilimleme (Slicing)
Stringler, listeler gibi indekslenerek ve dilimlenerek belirli bölümlerine erişilebilir. İndeksler 0’dan başlar.
* string[başlangıç:bitiş] : Başlangıç indeksinden (dahil) bitiş indeksine (hariç) kadar olan karakterleri alır.
* string[başlangıç:bitiş:adım] : Belirtilen adım aralıklarıyla karakterleri alır.
metin = "Python Programlama"
print(metin[0]) # P (ilk karakter)
print(metin[7]) # P (8. karakter)
print(metin[-1]) # a (son karakter)
print(metin[0:6]) # Python
print(metin[7:]) # Programlama (7. karakterden sonuna kadar)
print(metin[:6]) # Python (başından 6. karaktere kadar)
print(metin[::2]) # Pto rgalm (her 2 karakterde bir)
print(metin[::-1]) # amalmargorP nohtyP (stringi ters çevirme)
String Uzunluğu (Length)
Bir stringin uzunluğunu (karakter sayısını) len() fonksiyonu ile bulabilirsiniz.
metin = "Merhaba Dünya"
uzunluk = len(metin)
print(uzunluk) # 13
Stringlerin Immutable Yapısı
Yukarıda da belirtildiği gibi, Python’da stringler değişmez (immutable) veri tipleridir. Bu, bir string nesnesi oluşturulduktan sonra içeriğinin değiştirilemeyeceği anlamına gelir. Herhangi bir string işlemi (örneğin .replace(), birleştirme), aslında bellekte yeni bir string nesnesi oluşturur ve orijinal stringi olduğu gibi bırakır.
s = "merhaba"
s[0] = 'M' # TypeError: 'str' object does not support item assignment
yeni_s = s.upper() # yeni_s = "MERHABA", s hala "merhaba"
print(s) # merhaba
print(yeni_s) # MERHABA
Bu özellik, stringlerin hash’lenebilir olmasını sağlar ve sözlük anahtarları olarak kullanılabilmelerine olanak tanır.
Yaygın Kullanılan String Metotları
Python stringleri, üzerinde birçok işlemi gerçekleştirebilen zengin bir metot kümesiyle birlikte gelir. Bu metotlar, string nesneleri üzerinde doğrudan çağrılır.
Büyük/Küçük Harf Dönüşümü
Bu metotlar, stringlerin harf durumlarını değiştirmek için kullanılır.
.lower()
Stringdeki tüm büyük harfleri küçük harfe dönüştürür.
metin = "PYTHON Programlama"
print(metin.lower()) # python programlama
.upper()
Stringdeki tüm küçük harfleri büyük harfe dönüştürür.
metin = "python programlama"
print(metin.upper()) # PYTHON PROGRAMLAMA
.capitalize()
Stringin ilk karakterini büyük harfe, diğer tüm karakterleri küçük harfe dönüştürür.
metin = "merhaba dünya"
print(metin.capitalize()) # Merhaba dünya
.title()
Stringdeki her kelimenin ilk harfini büyük harfe, diğerlerini küçük harfe dönüştürür. Kelimeler boşluklarla ayrılmış olarak kabul edilir.
metin = "bu bir örnek metindir"
print(metin.title()) # Bu Bir Örnek Metindir
.swapcase()
Stringdeki büyük harfleri küçük harfe, küçük harfleri büyük harfe dönüştürür.
metin = "PyThOn PrOgRaMlAmA"
print(metin.swapcase()) # pYtHoN pRoGrAmLaMa
Metin Arama ve Kontrol
Bu metotlar, bir string içinde belirli alt stringleri aramak veya stringin içeriği hakkında bilgi almak için kullanılır.
.count(alt_string, başlangıç=0, bitiş=None)
Bir string içinde belirli bir alt stringin kaç kez geçtiğini sayar. İsteğe bağlı olarak arama aralığı belirtilebilir.
metin = "elma armut elma muz elma"
print(metin.count("elma")) # 3
print(metin.count("armut")) # 1
print(metin.count("elma", 0, 10)) # 1 (ilk 10 karakterde sadece bir "elma" var)
.find(alt_string, başlangıç=0, bitiş=None)
Bir alt stringin ilk geçtiği yerin indeksini döndürür. Bulamazsa -1 döndürür.
metin = "Python programlama dili"
print(metin.find("programlama")) # 7
print(metin.find("java")) # -1
.rfind(alt_string, başlangıç=0, bitiş=None)
find() metodunun aksine, alt stringin en sağdaki (son) geçtiği yerin indeksini döndürür. Bulamazsa -1 döndürür.
metin = "elma armut elma muz elma"
print(metin.rfind("elma")) # 20 (son elmanın başlangıç indeksi)
.index(alt_string, başlangıç=0, bitiş=None)
find() ile benzerdir, ancak alt string bulunamazsa ValueError hatası verir.
metin = "Python programlama dili"
print(metin.index("programlama")) # 7
print(metin.index("java")) # ValueError: substring not found
.rindex(alt_string, başlangıç=0, bitiş=None)
rfind() ile benzerdir, ancak alt string bulunamazsa ValueError hatası verir.
metin = "elma armut elma muz elma"
print(metin.rindex("elma")) # 20
print(metin.rindex("java")) # ValueError: substring not found
.startswith(prefix, başlangıç=0, bitiş=None)
Stringin belirtilen önek ile başlayıp başlamadığını kontrol eder. True veya False döndürür.
metin = "Merhaba Dünya"
print(metin.startswith("Mer")) # True
print(metin.startswith("Dünya", 8)) # True (8. indeksten itibaren "Dünya" ile başlıyor mu?)
print(metin.startswith("mer")) # False (büyük/küçük harf duyarlı)
.endswith(suffix, başlangıç=0, bitiş=None)
Stringin belirtilen sonek ile bitip bitmediğini kontrol eder. True veya False döndürür.
metin = "Merhaba Dünya"
print(metin.endswith("nya")) # True
print(metin.endswith("Dünya")) # True
print(metin.endswith("dünya")) # False (büyük/küçük harf duyarlı)
in operatörü
Bir alt stringin başka bir string içinde bulunup bulunmadığını kontrol etmek için in operatörü kullanılabilir. True veya False döndürür.
metin = "Python programlama dili"
print("programlama" in metin) # True
print("java" in metin) # False
Metin Değiştirme
Bu metotlar, bir string içindeki belirli karakterleri veya alt stringleri başka karakterler veya alt stringlerle değiştirmek için kullanılır.
.replace(eski, yeni, sayi=-1)
String içindeki eski alt stringlerini yeni alt stringleriyle değiştirir. İsteğe bağlı sayi parametresi ile kaç tane değiştirileceği belirtilebilir. Varsayılan olarak tümünü değiştirir.
metin = "Merhaba dünya, dünya çok güzel."
yeni_metin = metin.replace("dünya", "evren")
print(yeni_metin) # Merhaba evren, evren çok güzel.
yeni_metin_tek = metin.replace("dünya", "evren", 1)
print(yeni_metin_tek) # Merhaba evren, dünya çok güzel.
.translate(tablo) ve str.maketrans(x, y, z)
Bu metotlar, karakter bazında çoklu değiştirmeler yapmak için kullanılır ve daha karmaşık durumlar için replace()‘ten daha etkilidir.
str.maketrans() fonksiyonu, bir çeviri tablosu oluşturur. Bu tablo, translate() metoduna argüman olarak verilir.
* str.maketrans(dönüşüm_sözlüğü): Anahtarları orijinal karakterin Unicode değeri, değerleri ise yeni karakterin Unicode değeri olan bir sözlük ile tablo oluşturur.
* str.maketrans(eski_karakterler, yeni_karakterler): eski_karakterler stringindeki her karakteri, yeni_karakterler stringindeki karşılık gelen karakterle eşleştirir.
* str.maketrans(eski_karakterler, yeni_karakterler, silinecek_karakterler): Yukarıdakine ek olarak, silinecek_karakterler stringindeki tüm karakterleri stringden kaldırır.
metin = "Merhaba Dünya123!"
Örnek 1: Karakterleri tek tek değiştirme
tablo = str.maketrans("aeiou", "AEIOU")
print(metin.translate(tablo)) # MErhAbA DÜnyA123!
Örnek 2: Belirli karakterleri silme
tablo_sil = str.maketrans("", "", "123!")
print(metin.translate(tablo_sil)) # Merhaba Dünya
Örnek 3: Hem değiştirme hem silme
tablo_karisik = str.maketrans("a", "A", "123!")
print(metin.translate(tablo_karisik)) # MerhAbA DünyA
Metin Bölme ve Birleştirme
Bu metotlar, stringleri alt stringlere ayırmak veya bir string listesini tek bir stringde birleştirmek için kullanılır.
.split(ayırıcı=None, maxsplit=-1)
Stringi, belirtilen ayırıcıya göre böler ve alt stringlerin bir listesini döndürür. ayırıcı belirtilmezse, boşluk karakterlerine göre böler ve boş stringleri atlar. maxsplit parametresi, bölme sayısını sınırlar.
metin = "elma,armut,muz,çilek"
meyveler = metin.split(",")
print(meyveler) # ['elma', 'armut', 'muz', 'çilek']
cumle = "Bu bir örnek cümledir."
kelimeler = cumle.split() # Boşluklara göre böler
print(kelimeler) # ['Bu', 'bir', 'örnek', 'cümledir.']
parcalar = "bir iki üç dört".split(" ", 2) # Sadece ilk 2 boşluktan böler
print(parcalar) # ['bir', 'iki', 'üç dört']
.rsplit(ayırıcı=None, maxsplit=-1)
split() ile aynıdır, ancak bölme işlemini stringin sağından (sondan) başlatır.
metin = "bir-iki-üç-dört"
parcalar = metin.rsplit("-", 2) # Sağdan 2 kez böler
print(parcalar) # ['bir-iki', 'üç', 'dört']
.partition(ayırıcı)
Stringi, belirtilen ayırıcının ilk geçtiği yerden böler ve bir tuple döndürür: (ayırıcıdan önceki kısım, ayırıcı, ayırıcıdan sonraki kısım). Ayırıcı bulunamazsa, (orijinal string, “”, “”) döndürür.
metin = "isim:john.doe@example.com"
kullanici_adi, ayirici, alan_adi = metin.partition(":")
print(f"Kullanıcı Adı: {kullanici_adi}, Ayırıcı: {ayirici}, Alan Adı: {alan_adi}")
Kullanıcı Adı: isim, Ayırıcı: :, Alan Adı: john.doe@example.com
.rpartition(ayırıcı)
partition() ile aynıdır, ancak bölme işlemini ayırıcının en sağdaki (son) geçtiği yerden yapar.
dosya_yolu = "/home/user/belgeler/rapor.pdf"
dizin, ayirici, dosya_adi = dosya_yolu.rpartition("/")
print(f"Dizin: {dizin}, Ayırıcı: {ayirici}, Dosya Adı: {dosya_adi}")
Dizin: /home/user/belgeler, Ayırıcı: /, Dosya Adı: rapor.pdf
ayırıcı.join(iterable)
Bir string listesindeki veya başka bir yinelenebilir nesnedeki elemanları, ayırıcı stringini kullanarak tek bir stringde birleştirir.
kelimeler = ["Python", "çok", "güzel", "bir", "dil."]
cumle = " ".join(kelimeler)
print(cumle) # Python çok güzel bir dil.
sayilar = ["1", "2", "3", "4"]
virgul_ayirmali = ",".join(sayilar)
print(virgul_ayirmali) # 1,2,3,4
Boşluk Karakterlerini Yönetme
Bu metotlar, stringlerin başındaki veya sonundaki boşluk karakterlerini (boşluk, sekme, yeni satır vb.) kaldırmak için kullanılır.
.strip(karakterler=None)
Stringin başındaki ve sonundaki tüm boşluk karakterlerini kaldırır. İsteğe bağlı olarak, kaldırılacak karakterler belirtilebilir.
metin = " Merhaba Dünya \n"
print(metin.strip()) # "Merhaba Dünya"
metin2 = "---Python---"
print(metin2.strip("-")) # "Python"
.lstrip(karakterler=None)
Stringin sadece sol tarafındaki (başındaki) boşluk karakterlerini veya belirtilen karakterleri kaldırır.
metin = " Merhaba Dünya "
print(metin.lstrip()) # "Merhaba Dünya "
metin2 = "---Python---"
print(metin2.lstrip("-")) # "Python---"
.rstrip(karakterler=None)
Stringin sadece sağ tarafındaki (sonundaki) boşluk karakterlerini veya belirtilen karakterleri kaldırır.
metin = " Merhaba Dünya "
print(metin.rstrip()) # " Merhaba Dünya"
metin2 = "---Python---"
print(metin2.rstrip("-")) # "---Python"
Metin Hizalama ve Doldurma
Bu metotlar, stringleri belirli bir genişliğe hizalamak veya doldurmak için kullanılır.
.ljust(genişlik, dolgu_karakteri=' ')
Stringi, belirtilen genişlik kadar sola hizalar ve sağ tarafını dolgu_karakteri ile doldurur.
isim = "Ali"
print(isim.ljust(10, '-')) # Ali-------
.rjust(genişlik, dolgu_karakteri=' ')
Stringi, belirtilen genişlik kadar sağa hizalar ve sol tarafını dolgu_karakteri ile doldurur.
isim = "Ali"
print(isim.rjust(10, '')) # Ali
.center(genişlik, dolgu_karakteri=' ')
Stringi, belirtilen genişlik kadar ortalar ve her iki tarafını dolgu_karakteri ile doldurur.
isim = "Ali"
print(isim.center(10, '=')) # ===Ali====
.zfill(genişlik)
Stringin sayısal bir değeri temsil ettiğini varsayarak, sol tarafını sıfırlarla doldurarak belirtilen genişlike ulaşır. İşaret (+ veya -) varsa, sıfırlar işaret ile sayı arasına yerleştirilir.
sayi = "42"
print(sayi.zfill(5)) # 00042
negatif_sayi = "-123"
print(negatif_sayi.zfill(7)) # -000123
Karakter Tipi Kontrolleri
Bu metotlar, bir stringin içeriğinin belirli bir karakter tipini (alfabetik, sayısal vb.) temsil edip etmediğini kontrol eder.
.isalnum()
Stringdeki tüm karakterler alfabetik veya sayısal ise True döndürür, aksi takdirde False. En az bir karakter olmalıdır.
print("Python3".isalnum()) # True
print("Python Programlama".isalnum()) # False (boşluk var)
print("".isalnum()) # False (boş string)
.isalpha()
Stringdeki tüm karakterler alfabetik (harf) ise True döndürür, aksi takdirde False. En az bir karakter olmalıdır.
print("Python".isalpha()) # True
print("Python3".isalpha()) # False (sayı var)
.isdigit()
Stringdeki tüm karakterler sayısal (rakam) ise True döndürür, aksi takdirde False. En az bir karakter olmalıdır.
print("12345".isdigit()) # True
print("123a".isdigit()) # False
.islower()
Stringdeki tüm harfler küçük harf ise True döndürür, aksi takdirde False. En az bir harf olmalıdır.
print("python".islower()) # True
print("Python".islower()) # False
.isupper()
Stringdeki tüm harfler büyük harf ise True döndürür, aksi takdirde False. En az bir harf olmalıdır.
print("PYTHON".isupper()) # True
print("Python".isupper()) # False
.isspace()
Stringdeki tüm karakterler boşluk karakteri (boşluk, sekme, yeni satır vb.) ise True döndürür, aksi takdirde False. En az bir karakter olmalıdır.
print(" \n\t".isspace()) # True
print(" ".isspace()) # True
print(" A ".isspace()) # False
.istitle()
Stringin .title() metodunun kurallarına uygun olup olmadığını kontrol eder (yani her kelimenin ilk harfi büyük, diğerleri küçük).
print("Bu Bir Başlık".istitle()) # True
print("bu bir başlık".istitle()) # False
print("Bu bir başlık".istitle()) # False (ikinci kelime küçük harfle başlamış)
.isdecimal(), .isnumeric(), .isdigit() farkları
Bu üç metot sayısal karakterleri kontrol eder, ancak kapsamları farklıdır:
* .isdigit(): Sadece 0-9 arası rakamları ve bazı Unicode sayısal karakterleri (örn. üst simge rakamlar) kontrol eder.
* .isdecimal(): Sadece onluk tabandaki sayıları (0-9) kontrol eder.
* .isnumeric(): Tüm sayısal karakterleri (0-9, Roma rakamları, kesirler, üst simge/alt simge sayılar, Çince sayısal karakterler vb.) kontrol eder. Genellikle en geniş kapsamlı olanıdır.
print("123".isdigit()) # True
print("123".isdecimal()) # True
print("123".isnumeric()) # True
print("²".isdigit()) # True (üst simge 2)
print("²".isdecimal()) # False
print("²".isnumeric()) # True
print("½".isdigit()) # False (kesir)
print("½".isdecimal()) # False
print("½".isnumeric()) # True
print("Ⅳ".isdigit()) # False (Roma rakamı 4)
print("Ⅳ".isdecimal()) # False
print("Ⅳ".isnumeric()) # True
Formatlama Metotları
Stringleri daha okunabilir ve dinamik hale getirmek için kullanılırlar.
.format()
String içindeki {} yer tutucularını argümanlarla doldurur. Konumsal veya anahtar kelime argümanları kullanılabilir.
isim = "Ayşe"
yas = 30
mesaj = "Merhaba, benim adım {} ve {} yaşındayım.".format(isim, yas)
print(mesaj) # Merhaba, benim adım Ayşe ve 30 yaşındayım.
mesaj_kw = "Merhaba, benim adım {ad} ve {yas} yaşındayım.".format(ad="Mehmet", yas=25)
print(mesaj_kw) # Merhaba, benim adım Mehmet ve 25 yaşındayım.
Formatlama seçenekleri
pi = 3.14159
print("Pi sayısı: {:.2f}".format(pi)) # Pi sayısı: 3.14
sayi = 1234567
print("Büyük sayı: {:,}".format(sayi)) # Büyük sayı: 1,234,567
f-stringler (Formatted String Literals)
Python 3.6 ile tanıtılan f-stringler, string formatlamanın en modern ve tercih edilen yoludur. Daha kısa, okunabilir ve genellikle daha performanslıdırlar. Stringin başına f veya F koyularak oluşturulur ve {} içine doğrudan değişkenler veya ifadeler yazılabilir.
isim = "Can"
yas = 28
mesaj = f"Merhaba, benim adım {isim} ve {yas} yaşındayım."
print(mesaj) # Merhaba, benim adım Can ve 28 yaşındayım.
İfade kullanımı
x = 10
y = 20
print(f"Toplam: {x + y}") # Toplam: 30
Formatlama seçenekleri f-stringlerde de kullanılabilir
pi = 3.14159
print(f"Pi sayısı: {pi:.2f}") # Pi sayısı: 3.14
sayi = 1234567
print(f"Büyük sayı: {sayi:,}") # Büyük sayı: 1,234,567
Gelişmiş String İşlemleri ve Performans
Büyük veri kümeleriyle veya performans kritik uygulamalarda çalışırken, string işlemlerinin performansı önem kazanabilir.
String Birleştirmede Performans
Python’da stringler değişmez olduğu için, + operatörü ile birden fazla stringi birleştirmek, her bir birleştirme işleminde yeni bir string oluşturulmasına neden olur. Bu, özellikle çok sayıda stringi döngü içinde birleştirirken performans düşüşüne yol açabilir.
# Kötü performans örneği (büyük döngülerde)
s = ""
for i in range(10000):
s += str(i) # Her adımda yeni bir string oluşturulur
Daha iyi performans örneği: .join() metodu
liste = []
for i in range(10000):
liste.append(str(i))
s = "".join(liste) # Tek bir birleştirme işlemi yapılır
join() metodu, birleştirilecek tüm parçaları önceden toplayıp tek seferde yeni bir string oluşturduğu için çok daha verimlidir.
Regex (Düzenli İfadeler) ile String İşlemleri
Python’ın re modülü, stringler üzerinde karmaşık desen eşleştirme ve manipülasyonu için düzenli ifadeler (regex) kullanmaya olanak tanır. Bu, standart string metotlarının yetersiz kaldığı durumlarda çok güçlü bir araçtır.
Bazı yaygın re modülü fonksiyonları:
* re.search(desen, metin): Metin içinde desenin ilk geçtiği yeri arar. Bir eşleşme nesnesi veya None döndürür.
* re.match(desen, metin): Metnin başlangıcında desenin eşleşip eşleşmediğini kontrol eder.
* re.findall(desen, metin): Metindeki desenin tüm eşleşmelerini bir liste olarak döndürür.
* re.sub(desen, yeni_string, metin): Desenle eşleşen tüm alt stringleri yeni_string ile değiştirir.
* re.split(desen, metin): Desene göre stringi böler.
import re
metin = "Telefon numaralarım: 555-123-4567 ve 543-987-6543."
Numaraları bulma
telefon_numaralari = re.findall(r'\d{3}-\d{3}-\d{4}', metin)
print(telefon_numaralari) # ['555-123-4567', '543-987-6543']
E-posta adresi doğrulama
email = "test@example.com"
if re.match(r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$', email):
print(f"'{email}' geçerli bir e-posta adresidir.")
else:
print(f"'{email}' geçersiz bir e-posta adresidir.")
Tarihleri değiştirme
metin_tarih = "Bugünün tarihi 2023-10-26, yarın 2023-10-27."
yeni_metin_tarih = re.sub(r'2023-10-(\d{2})', r'2024-01-\1', metin_tarih)
print(yeni_metin_tarih) # Bugünün tarihi 2024-01-26, yarın 2024-01-27.
Regex, metin işleme yeteneklerini büyük ölçüde genişletir, ancak öğrenmesi ve kullanması standart string metotlarına göre daha karmaşıktır.
Sonuç
Python’ın string fonksiyonları ve metotları, metin verileriyle çalışmak için son derece güçlü, esnek ve kapsamlı bir araç seti sunar. Temel string oluşturma ve indekslemeden başlayarak, büyük/küçük harf dönüşümleri, arama, değiştirme, bölme, birleştirme, boşluk yönetimi ve formatlama gibi çeşitli işlemleri kolayca gerçekleştirebiliriz. .format() metodu ve özellikle f-stringler gibi modern formatlama yaklaşımları, stringleri dinamik ve okunabilir bir şekilde oluşturmayı basitleştirir.
Stringlerin değişmez (immutable) yapısı, Python’da string manipülasyonunun temel bir yönüdür ve performans açısından join() metodunun neden + operatörüne tercih edildiğini açıklar. Daha karmaşık desen eşleştirme ve metin manipülasyonu ihtiyaçları için re (düzenli ifadeler) modülü, neredeyse sınırsız olanaklar sunar.
Veri bilimi, web geliştirme, otomasyon veya herhangi bir metin tabanlı işlem gerektiren projelerde, Python’ın string yeteneklerini etkin bir şekilde kullanmak, kodunuzu daha temiz, daha verimli ve daha az hataya açık hale getirecektir. Bu makale, Python string fonksiyonlarının geniş dünyasına bir kapı aralamış ve okuyuculara bu güçlü araçları kendi projelerinde kullanmaları için sağlam bir temel sunmuştur.
