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 arg2Daha 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 = hataStandart 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ı:
| Kod | Anlamı | Örnek |
|---|---|---|
%Y | 4 basamaklı yıl | 2024 |
%m | Ay (01-12) | 06 |
%d | Gün (01-31) | 15 |
%H | Saat (00-23) | 14 |
%M | Dakika (00-59) | 30 |
%S | Saniye (00-59) | 45 |
%A | Gün adı | Saturday |
%B | Ay 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:
strftimevestrptimeisimleri kafa karıştırabilir. Hatırlama: format (datetime → string), parse (string → datetime). Ayrıcadate.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} → Truemath 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 82Pratik: Ş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
randomyerinesecretsmodülünü kullan.randomkriptografik olarak güvenli değil — tahmin edilebilir.secrets.token_hex(16)veyasecrets.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 karakterlerTemplate 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" — korunduKopya 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 listeBu 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 mutlakacopy.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)) # 27hashlib: 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 —
timedeltaile tarih aritmetiği,strftime/strptimeile format dönüşümleri yap.collections modülü güçlü veri yapıları sunar —
Counterile say,defaultdictile varsayılan değerli sözlük oluştur,dequeile çift uçlu kuyruk kullan,namedtupleile okunabilir tuple'lar yaz.random modülü rastgele sayı ve seçim için kullanılır — ama güvenlik için
secretsmodülünü tercih et.mathmodülü matematiksel hesaplamalar için,stringmodülü karakter sabitleri için,copymodü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.
AI Asistan
Sorularını yanıtlamaya hazır