← Kursa Dön
📄 Text · 18 min

Standart Kütüphane Turu

Python'ın en büyük güçlerinden biri "batteries included" (piller dahil) felsefesidir. Kurulumla birlikte gelen yüzlerce modül, çoğu işi üçüncü parti paket yüklemeden halletmeni sağlar. Bu derste en sık kullanılan standart kütüphane modüllerini inceleyeceğiz.

🏪 Süpermarket Analojisi

Standart kütüphaneyi bir büyük süpermarket gibi düşün. Çoğu ihtiyacını burada bulabilirsin — ekmek (os), süt (sys), meyve (math), sebze (datetime), temizlik malzemesi (json)... Butik dükkana (üçüncü parti paket) ancak süpermarkette olmayan özel bir ürün istediğinde gidersin.

Her reyona (modüle) import ile girersin. Bu derste süpermarketin en popüler reyonlarını gezeceğiz.


os Modülü: İşletim Sistemi İşlemleri

os modülü işletim sistemiyle etkileşim kurmak için kullanılır — dosya/dizin işlemleri, ortam değişkenleri, süreç yönetimi ve daha fazlası.

Ortam Değişkenleri (Environment Variables)

import os

# Ortam değişkenini oku
home = os.environ.get("HOME", "/root")
path = os.environ.get("PATH", "")
print(f"Home: {home}")

# Ortam değişkeni ayarla
os.environ["MY_APP_DEBUG"] = "true"

# Tüm ortam değişkenlerini listele
for key, value in os.environ.items():
    if key.startswith("MY_"):
        print(f"{key} = {value}")

os.environ.get() kullanmak önemli — os.environ["OLMAYAN"] KeyError fırlatır.

Dosya ve Dizin İşlemleri

import os

# Mevcut çalışma dizini
print(os.getcwd())

# Dizin değiştir
os.chdir("/tmp")

# Dizin oluştur
os.makedirs("proje/src/utils", exist_ok=True)

# Dizin içeriğini listele
for oge in os.listdir("."):
    print(oge)

# Dosya/dizin bilgisi
bilgi = os.stat("dosya.txt")
print(f"Boyut: {bilgi.st_size} byte")
print(f"Son değişiklik: {bilgi.st_mtime}")

# Dosya sil
os.remove("gereksiz.txt")

# Boş dizin sil
os.rmdir("bos_dizin")

# Dizin ağacında yürü
for dizin, alt_dizinler, dosyalar in os.walk("."):
    for dosya in dosyalar:
        tam_yol = os.path.join(dizin, dosya)
        print(tam_yol)

Pratik: Proje Şablonu Oluşturucu

import os

def proje_olustur(proje_adi):
    """Basit Python projesi şablonu oluşturur."""
    dizinler = [
        proje_adi,
        f"{proje_adi}/{proje_adi}",
        f"{proje_adi}/tests",
        f"{proje_adi}/docs",
    ]
    
    for dizin in dizinler:
        os.makedirs(dizin, exist_ok=True)
        print(f"📁 Oluşturuldu: {dizin}")
    
    # __init__.py oluştur
    init_yolu = os.path.join(proje_adi, proje_adi, "__init__.py")
    with open(init_yolu, "w") as f:
        f.write(f'"""{ proje_adi} paketi."""\n\n__version__ = "0.1.0"\n')
    
    print(f"\n✅ {proje_adi} projesi oluşturuldu!")

proje_olustur("harika_proje")

Sistem Bilgisi

import os

print(f"İşletim sistemi: {os.name}")        # posix / nt
print(f"Platform: {os.uname()}")              # Linux bilgisi
print(f"CPU sayısı: {os.cpu_count()}")
print(f"PID: {os.getpid()}")                  # Process ID
print(f"Satır sonu: {repr(os.linesep)}")      # '\n' veya '\r\n'
print(f"Yol ayırıcı: {os.sep}")               # '/' veya '\\'

sys Modülü: Python Yorumlayıcısı

sys modülü Python yorumlayıcısıyla etkileşim kurar — komut satırı argümanları, Python sürüm bilgisi, standart giriş/çıkış.

Komut Satırı Argümanları

# script.py
import sys

print(f"Script adı: {sys.argv[0]}")
print(f"Argümanlar: {sys.argv[1:]}")
print(f"Toplam argüman: {len(sys.argv)}")

# Kullanım: python script.py arg1 arg2

Daha gelişmiş argüman işleme için argparse modülünü kullan:

import argparse

parser = argparse.ArgumentParser(description="Dosya işleme aracı")
parser.add_argument("dosya", help="İşlenecek dosya")
parser.add_argument("-v", "--verbose", action="store_true", help="Detaylı çıktı")
parser.add_argument("-n", "--satir", type=int, default=10, help="Satır sayısı")

args = parser.parse_args()
print(f"Dosya: {args.dosya}")
print(f"Verbose: {args.verbose}")
print(f"Satır: {args.satir}")

Sistem Bilgisi ve Çıkış

import sys

print(f"Python sürümü: {sys.version}")
print(f"Platform: {sys.platform}")
print(f"Maksimum int: {sys.maxsize}")
print(f"Varsayılan encoding: {sys.getdefaultencoding()}")
print(f"Recursion limiti: {sys.getrecursionlimit()}")

# Modül arama yolları
for yol in sys.path:
    print(yol)

# Yüklü modülleri gör
print(list(sys.modules.keys())[:10])

# Programdan çık
# sys.exit(0)   # 0 = başarılı
# sys.exit(1)   # 1 = hata

Standart Giriş/Çıkış

import sys

# Standart çıkışa yaz (print ile aynı)
sys.stdout.write("Normal mesaj\n")

# Standart hataya yaz (error mesajları için)
sys.stderr.write("Hata mesajı\n")

# Standart girdiden oku (input ile benzer)
# satir = sys.stdin.readline()

datetime Modülü: Tarih ve Zaman

datetime modülü tarih ve zaman işlemleri için vazgeçilmez:

Temel Kullanım

from datetime import date, time, datetime, timedelta

# Bugünün tarihi
bugun = date.today()
print(f"Bugün: {bugun}")           # 2024-06-15
print(f"Yıl: {bugun.year}")
print(f"Ay: {bugun.month}")
print(f"Gün: {bugun.day}")
print(f"Haftanın günü: {bugun.weekday()}")  # 0=Pzt, 6=Pzr

# Şimdiki zaman
simdi = datetime.now()
print(f"Şimdi: {simdi}")          # 2024-06-15 14:30:45.123456

# Belirli tarih oluştur
dogum = date(1990, 5, 15)
etkinlik = datetime(2024, 12, 31, 23, 59, 59)

timedelta: Tarih Aritmetiği

from datetime import date, timedelta

bugun = date.today()

# 30 gün sonra
gelecek = bugun + timedelta(days=30)
print(f"30 gün sonra: {gelecek}")

# 1 hafta önce
gecmis = bugun - timedelta(weeks=1)
print(f"1 hafta önce: {gecmis}")

# İki tarih arası fark
yilbasi = date(2025, 1, 1)
kalan = yilbasi - bugun
print(f"Yılbaşına {kalan.days} gün")

# Saat farkı
from datetime import datetime, timedelta
simdi = datetime.now()
toplanti = simdi + timedelta(hours=2, minutes=30)
print(f"Toplantı: {toplanti}")

strftime ve strptime: Format Dönüşümleri

from datetime import datetime

simdi = datetime.now()

# datetime → string (strftime = string format time)
print(simdi.strftime("%d/%m/%Y"))          # 15/06/2024
print(simdi.strftime("%H:%M:%S"))          # 14:30:45
print(simdi.strftime("%d %B %Y, %A"))      # 15 June 2024, Saturday
print(simdi.strftime("%Y-%m-%d %H:%M"))    # 2024-06-15 14:30

# string → datetime (strptime = string parse time)
tarih_str = "15/06/2024 14:30"
tarih = datetime.strptime(tarih_str, "%d/%m/%Y %H:%M")
print(f"Parse edildi: {tarih}")

Yaygın format kodları:

KodAnlamıÖrnek
%Y4 basamaklı yıl2024
%mAy (01-12)06
%dGün (01-31)15
%HSaat (00-23)14
%MDakika (00-59)30
%SSaniye (00-59)45
%AGün adıSaturday
%BAy adıJune

Pratik: Yaş Hesaplayıcı

from datetime import date

def yas_hesapla(dogum_tarihi_str):
    """Doğum tarihinden yaşı hesaplar."""
    dogum = date.fromisoformat(dogum_tarihi_str)
    bugun = date.today()
    
    yas = bugun.year - dogum.year
    
    # Doğum günü henüz geçmediyse 1 çıkar
    if (bugun.month, bugun.day) < (dogum.month, dogum.day):
        yas -= 1
    
    bir_sonraki_dogum = dogum.replace(year=bugun.year)
    if bir_sonraki_dogum < bugun:
        bir_sonraki_dogum = dogum.replace(year=bugun.year + 1)
    
    kalan_gun = (bir_sonraki_dogum - bugun).days
    
    return yas, kalan_gun

yas, kalan = yas_hesapla("1995-03-15")
print(f"Yaşınız: {yas}")
print(f"Doğum gününüze {kalan} gün kaldı!")

💡 İpucu: strftime ve strptime isimleri kafa karıştırabilir. Hatırlama: format (datetime → string), parse (string → datetime). Ayrıca date.fromisoformat("2024-06-15") ile ISO format tarihlerini kolayca parse edebilirsin.


collections Modülü: Özel Veri Yapıları

collections modülü Python'ın yerleşik veri yapılarının güçlendirilmiş versiyonlarını sunar.

Counter: Sayma İşlemleri

from collections import Counter

# Kelime sayma
metin = "elma armut elma muz elma armut kiraz"
sayac = Counter(metin.split())
print(sayac)
# Counter({'elma': 3, 'armut': 2, 'muz': 1, 'kiraz': 1})

print(sayac.most_common(2))    # [('elma', 3), ('armut', 2)]
print(sayac["elma"])            # 3
print(sayac["portakal"])        # 0 (KeyError yerine 0!)

# Harf sayma
harfler = Counter("mississippi")
print(harfler)
# Counter({'i': 4, 's': 4, 'p': 2, 'm': 1})

# Counter aritmetiği
a = Counter(["elma", "armut", "elma"])
b = Counter(["elma", "muz"])
print(a + b)   # Counter({'elma': 3, 'armut': 1, 'muz': 1})
print(a - b)   # Counter({'elma': 1, 'armut': 1})

defaultdict: Varsayılan Değerli Sözlük

from collections import defaultdict

# Normal dict ile sorun
normal = {}
# normal["meyve"].append("elma")  # KeyError!

# defaultdict çözümü
gruplar = defaultdict(list)
gruplar["meyve"].append("elma")
gruplar["meyve"].append("armut")
gruplar["sebze"].append("domates")
print(dict(gruplar))
# {'meyve': ['elma', 'armut'], 'sebze': ['domates']}

# Sayaç olarak
sayac = defaultdict(int)
for harf in "mississippi":
    sayac[harf] += 1
print(dict(sayac))  # {'m': 1, 'i': 4, 's': 4, 'p': 2}

deque: Çift Uçlu Kuyruk

from collections import deque

# Liste gibi ama başa ekleme/çıkarma O(1)
kuyruk = deque([1, 2, 3])

kuyruk.append(4)          # Sona ekle: [1, 2, 3, 4]
kuyruk.appendleft(0)      # Başa ekle: [0, 1, 2, 3, 4]
kuyruk.pop()              # Sondan çıkar: 4
kuyruk.popleft()          # Baştan çıkar: 0

# Sabit boyutlu deque — eski elemanlar otomatik silinir
son_loglar = deque(maxlen=5)
for i in range(10):
    son_loglar.append(f"Log #{i}")
print(list(son_loglar))  # ['Log #5', 'Log #6', 'Log #7', 'Log #8', 'Log #9']

# Döndürme
d = deque([1, 2, 3, 4, 5])
d.rotate(2)      # Sağa 2 döndür: [4, 5, 1, 2, 3]
d.rotate(-1)     # Sola 1 döndür: [5, 1, 2, 3, 4]

namedtuple: İsimli Tuple

from collections import namedtuple

# Tanımlama
Nokta = namedtuple("Nokta", ["x", "y"])
Ogrenci = namedtuple("Ogrenci", "ad soyad yas not_ort")

# Kullanım
p = Nokta(3, 4)
print(f"x={p.x}, y={p.y}")   # İsimle erişim
print(f"x={p[0]}, y={p[1]}") # İndeksle de erişim

ogr = Ogrenci("Ali", "Yılmaz", 20, 85.5)
print(f"{ogr.ad} {ogr.soyad}: {ogr.not_ort}")

# Sözlüğe çevirme
print(ogr._asdict())
# {'ad': 'Ali', 'soyad': 'Yılmaz', 'yas': 20, 'not_ort': 85.5}

# Değer değiştirme (yeni tuple döner — immutable)
yeni = ogr._replace(yas=21)
print(yeni)

OrderedDict

Python 3.7+'da normal dict zaten ekleme sırasını korur. Ama OrderedDict ek özellikler sunar:

from collections import OrderedDict

od = OrderedDict()
od["c"] = 3
od["a"] = 1
od["b"] = 2

# Sona taşı
od.move_to_end("c")
print(list(od.keys()))  # ['a', 'b', 'c']

# Başa taşı
od.move_to_end("c", last=False)
print(list(od.keys()))  # ['c', 'a', 'b']

# Sıra bazlı karşılaştırma
od1 = OrderedDict([("a", 1), ("b", 2)])
od2 = OrderedDict([("b", 2), ("a", 1)])
print(od1 == od2)  # False — sıra farklı!

# Normal dict ile aynı karşılaştırma:
# {"a": 1, "b": 2} == {"b": 2, "a": 1}  → True

math Modülü: Matematik

import math

# Sabitler
print(math.pi)       # 3.141592653589793
print(math.e)        # 2.718281828459045
print(math.inf)      # Sonsuz
print(math.nan)      # Not a Number

# Yuvarlama
print(math.floor(3.7))   # 3 (aşağı yuvarla)
print(math.ceil(3.2))    # 4 (yukarı yuvarla)
print(math.trunc(3.7))   # 3 (ondalığı at)

# Kuvvet ve karekök
print(math.sqrt(16))      # 4.0
print(math.pow(2, 10))    # 1024.0
print(math.isqrt(17))     # 4 (tam kare kök - Python 3.8+)

# Logaritma
print(math.log(100, 10))  # 2.0 (log₁₀100)
print(math.log2(1024))    # 10.0
print(math.log10(1000))   # 3.0
print(math.log(math.e))   # 1.0 (doğal logaritma)

# Trigonometri (radyan cinsinden)
print(math.sin(math.pi / 2))    # 1.0
print(math.cos(0))               # 1.0
print(math.tan(math.pi / 4))    # ~1.0
print(math.degrees(math.pi))    # 180.0 (radyan → derece)
print(math.radians(180))        # π (derece → radyan)

# Faktöriyel ve kombinasyon
print(math.factorial(5))    # 120
print(math.comb(10, 3))     # 120 (10'dan 3 seçme)
print(math.perm(10, 3))     # 720 (10'dan 3 sıralama)

# Özel fonksiyonlar
print(math.gcd(12, 18))     # 6 (en büyük ortak bölen)
print(math.lcm(4, 6))       # 12 (en küçük ortak kat - Python 3.9+)
print(math.fabs(-5.5))      # 5.5 (mutlak değer, float döner)

random Modülü: Rastgele Sayılar

import random

# Tam sayı
print(random.randint(1, 100))      # 1-100 arası (dahil)
print(random.randrange(0, 100, 5)) # 0-95 arası 5'in katları

# Ondalıklı sayı
print(random.random())              # 0.0-1.0 arası
print(random.uniform(1.5, 9.5))     # 1.5-9.5 arası

# Listeden seçim
renkler = ["kırmızı", "mavi", "yeşil", "sarı"]
print(random.choice(renkler))       # Rastgele bir eleman
print(random.choices(renkler, k=3)) # 3 eleman (tekrar olabilir)
print(random.sample(renkler, k=2))  # 2 eleman (tekrarsız)

# Listeyi karıştır
sayilar = [1, 2, 3, 4, 5]
random.shuffle(sayilar)  # Yerinde karıştırır
print(sayilar)  # [3, 1, 5, 2, 4] gibi

# Tekrarlanabilir rastgelelik (seed)
random.seed(42)
print(random.randint(1, 100))  # Her zaman aynı sonuç: 82
random.seed(42)
print(random.randint(1, 100))  # Yine 82

Pratik: Şifre Üretici

import random
import string

def sifre_uret(uzunluk=16, buyuk=True, kucuk=True, rakam=True, ozel=True):
    """Güvenli rastgele şifre üretir."""
    karakterler = ""
    if buyuk:
        karakterler += string.ascii_uppercase
    if kucuk:
        karakterler += string.ascii_lowercase
    if rakam:
        karakterler += string.digits
    if ozel:
        karakterler += string.punctuation
    
    if not karakterler:
        raise ValueError("En az bir karakter türü seçilmeli!")
    
    # Her türden en az 1 karakter garanti et
    sifre = []
    if buyuk:
        sifre.append(random.choice(string.ascii_uppercase))
    if kucuk:
        sifre.append(random.choice(string.ascii_lowercase))
    if rakam:
        sifre.append(random.choice(string.digits))
    if ozel:
        sifre.append(random.choice(string.punctuation))
    
    # Kalan karakterleri doldur
    while len(sifre) < uzunluk:
        sifre.append(random.choice(karakterler))
    
    random.shuffle(sifre)
    return "".join(sifre)

print(sifre_uret(12))
print(sifre_uret(8, ozel=False))

⚠️ Dikkat: Güvenlik gerektiren uygulamalarda random yerine secrets modülünü kullan. random kriptografik olarak güvenli değil — tahmin edilebilir. secrets.token_hex(16) veya secrets.choice() güvenli alternatifler.


string Modülü: String Sabitleri

import string

print(string.ascii_letters)    # abcdefghijklmnopqrstuvwxyzABCDEF...
print(string.ascii_lowercase)  # abcdefghijklmnopqrstuvwxyz
print(string.ascii_uppercase)  # ABCDEFGHIJKLMNOPQRSTUVWXYZ
print(string.digits)           # 0123456789
print(string.hexdigits)        # 0123456789abcdefABCDEF
print(string.punctuation)      # !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
print(string.whitespace)       # boşluk, tab, newline vb.
print(string.printable)        # Yazdırılabilir tüm karakterler

Template String'ler

from string import Template

sablon = Template("Merhaba $isim, $yas yaşındasın!")
sonuc = sablon.substitute(isim="Ali", yas=25)
print(sonuc)  # Merhaba Ali, 25 yaşındasın!

# Güvenli versiyon — eksik anahtar hatası vermez
sonuc = sablon.safe_substitute(isim="Veli")
print(sonuc)  # Merhaba Veli, $yas yaşındasın!

copy Modülü: Kopyalama

Python'da atama (=) nesnenin kendisini değil referansını kopyalar. Gerçek kopya istiyorsan copy modülü lazım.

import copy

# Sığ kopya (shallow copy)
orijinal = [[1, 2], [3, 4], [5, 6]]
sig_kopya = copy.copy(orijinal)

sig_kopya[0][0] = 99      # İç liste paylaşılıyor!
print(orijinal[0])         # [99, 2] — orijinal de değişti!

sig_kopya.append([7, 8])   # Dış liste bağımsız
print(len(orijinal))       # 3 — orijinal değişmedi

# Derin kopya (deep copy)
orijinal = [[1, 2], [3, 4], [5, 6]]
derin_kopya = copy.deepcopy(orijinal)

derin_kopya[0][0] = 99     # Tamamen bağımsız
print(orijinal[0])          # [1, 2] — orijinal korundu!

Ne Zaman Hangisi?

import copy

# Basit liste — copy yeterli
sayilar = [1, 2, 3, 4]
kopya = copy.copy(sayilar)  # veya sayilar.copy() veya sayilar[:]

# İç içe yapı — deepcopy gerekli
ayarlar = {
    "veritabani": {"host": "localhost", "port": 5432},
    "cache": {"ttl": 300, "max_size": 1000}
}
yeni_ayarlar = copy.deepcopy(ayarlar)
yeni_ayarlar["veritabani"]["host"] = "remote-server"
print(ayarlar["veritabani"]["host"])  # "localhost" — korundu

Kopya Tuzağı: Fonksiyon Parametreleri

# Tehlikeli — varsayılan mutable argüman
def listeye_ekle(eleman, liste=[]):
    liste.append(eleman)
    return liste

print(listeye_ekle(1))  # [1]
print(listeye_ekle(2))  # [1, 2] — Beklenen: [2] !!

# Güvenli yöntem
def listeye_ekle_guvenli(eleman, liste=None):
    if liste is None:
        liste = []
    liste.append(eleman)
    return liste

Bu Python'ın en bilinen tuzaklarından biri. copy kullanmayı bilmek bu tür durumları anlamana yardımcı olur.

💡 İpucu: list.copy(), dict.copy() ve dilim (liste[:]) hep sığ kopya yapar. İç içe yapılarda mutlaka copy.deepcopy() kullan.


Bonus: Diğer Faydalı Modüller

itertools: Iterator Araçları

import itertools

# Sonsuz sayaç
sayac = itertools.count(start=1, step=2)
print([next(sayac) for _ in range(5)])  # [1, 3, 5, 7, 9]

# Döngüsel tekrar
renkler = itertools.cycle(["kırmızı", "yeşil", "mavi"])
print([next(renkler) for _ in range(6)])
# ['kırmızı', 'yeşil', 'mavi', 'kırmızı', 'yeşil', 'mavi']

# Kartezyen çarpım
for x, y in itertools.product("AB", [1, 2]):
    print(f"{x}{y}", end=" ")  # A1 A2 B1 B2

# Kombinasyonlar
print(list(itertools.combinations("ABCD", 2)))
# [('A','B'), ('A','C'), ('A','D'), ('B','C'), ('B','D'), ('C','D')]

# Zincirleme
a = [1, 2, 3]
b = [4, 5, 6]
print(list(itertools.chain(a, b)))  # [1, 2, 3, 4, 5, 6]

functools: Fonksiyon Araçları

from functools import lru_cache, reduce, partial

# Cache (memoization)
@lru_cache(maxsize=128)
def fibonacci(n):
    if n < 2:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)

print(fibonacci(100))  # Anında hesaplar!

# reduce
toplam = reduce(lambda a, b: a + b, [1, 2, 3, 4, 5])
print(toplam)  # 15

# partial — kısmi fonksiyon
def kuvvet(taban, us):
    return taban ** us

kare = partial(kuvvet, us=2)
kup = partial(kuvvet, us=3)
print(kare(5))   # 25
print(kup(3))    # 27

hashlib: Hash Hesaplama

import hashlib

# String hash'i
metin = "Merhaba Dünya"
md5 = hashlib.md5(metin.encode()).hexdigest()
sha256 = hashlib.sha256(metin.encode()).hexdigest()

print(f"MD5: {md5}")
print(f"SHA-256: {sha256}")

# Dosya hash'i hesaplama (büyük dosyalar için)
def dosya_hash(dosya_yolu):
    sha = hashlib.sha256()
    with open(dosya_yolu, "rb") as f:
        while parca := f.read(8192):
            sha.update(parca)
    return sha.hexdigest()

uuid: Benzersiz Kimlik

import uuid

# Rastgele UUID (en yaygın)
id1 = uuid.uuid4()
print(id1)        # 550e8400-e29b-41d4-a716-446655440000 gibi
print(str(id1))   # String olarak
print(id1.hex)    # Tire olmadan: 550e8400e29b41d4a716446655440000

# İsim bazlı UUID (aynı isim her zaman aynı UUID üretir)
id2 = uuid.uuid5(uuid.NAMESPACE_DNS, "example.com")
print(id2)  # Her zaman aynı sonuç

re: Düzenli İfadeler (Regular Expressions)

import re

metin = "Beni 0532-123-4567 veya 0544 987 6543 numarasından arayın."

# Telefon numaralarını bul
telefonlar = re.findall(r"\d{4}[\s-]?\d{3}[\s-]?\d{4}", metin)
print(telefonlar)  # ['0532-123-4567', '0544 987 6543']

# Email doğrulama
email = "ali@example.com"
if re.match(r"^[\w.+-]+@[\w-]+\.[\w.]+$", email):
    print("Geçerli email")

# Metin değiştirme
temiz = re.sub(r"\s+", " ", "  Çok    boşluklu   metin  ")
print(temiz.strip())  # "Çok boşluklu metin"

# Gruplar
tarih_str = "2024-06-15"
match = re.match(r"(\d{4})-(\d{2})-(\d{2})", tarih_str)
if match:
    yil, ay, gun = match.groups()
    print(f"Yıl: {yil}, Ay: {ay}, Gün: {gun}")

subprocess: Harici Komut Çalıştırma

import subprocess

# Basit komut çalıştır
sonuc = subprocess.run(["ls", "-la"], capture_output=True, text=True)
print(sonuc.stdout)
print(f"Çıkış kodu: {sonuc.returncode}")

# Python ile
sonuc = subprocess.run(
    ["python", "-c", "print('Merhaba')"],
    capture_output=True, text=True
)
print(sonuc.stdout.strip())  # Merhaba

# Hata kontrolü
try:
    subprocess.run(["olmayan_komut"], check=True, capture_output=True)
except subprocess.CalledProcessError as e:
    print(f"Komut başarısız: {e}")
except FileNotFoundError:
    print("Komut bulunamadı")

json ve pprint: Güzel Yazdırma

from pprint import pprint

veri = {
    "kullanicilar": [
        {"ad": "Ali", "yas": 25, "hobiler": ["okumak", "yüzmek"]},
        {"ad": "Veli", "yas": 30, "hobiler": ["koşmak", "kodlamak"]},
    ],
    "toplam": 2
}

# print ile karmaşık görünür
print(veri)

# pprint ile düzgün görünür
pprint(veri, indent=2, width=60)

Özet

Bu derste Python standart kütüphanesinin en önemli modüllerini keşfettik:

  • os modülü işletim sistemiyle etkileşim kurar — ortam değişkenleri (os.environ), dizin işlemleri (os.makedirs, os.listdir), dosya bilgisi (os.stat) için kullan.

  • sys modülü Python yorumlayıcısıyla çalışır — komut satırı argümanları (sys.argv), modül arama yolu (sys.path), program çıkışı (sys.exit) için kullan.

  • datetime modülü tarih/zaman işlemleri için vazgeçilmez — timedelta ile tarih aritmetiği, strftime/strptime ile format dönüşümleri yap.

  • collections modülü güçlü veri yapıları sunar — Counter ile say, defaultdict ile varsayılan değerli sözlük oluştur, deque ile çift uçlu kuyruk kullan, namedtuple ile okunabilir tuple'lar yaz.

  • random modülü rastgele sayı ve seçim için kullanılır — ama güvenlik için secrets modülünü tercih et. math modülü matematiksel hesaplamalar için, string modülü karakter sabitleri için, copy modülü derin kopyalama için kullan.

  • "Batteries included" felsefesi: İhtiyacın olan şey muhtemelen standart kütüphanede var. Üçüncü parti paket yüklemeden önce standart kütüphaneyi kontrol et.