1. Dosya İşlemleri
Dosya Açma Modları
Python’da dosya işlemleri için open() fonksiyonu kullanılır:
r(read): Okuma modunda açarw(write): Yazma modunda — dosya yoksa oluşturur, varsa üzerine yazara(append): Sonuna ekleme yapmak için açar
# Dosya açma ve okuma:
file = open("example.txt", "r")
print(file.read())
file.close()
Dosya Okuma Metotları
read()— Dosyanın tamamını okurreadline()— Satır satır okuma yaparreadlines()— Tüm satırları bir liste olarak döner
# Satır satır okuma:
with open("example.txt", "r") as file:
for line in file:
print(line.strip())
Dosya Yazma
with open("example.txt", "w") as file:
file.write("Bu yeni bir dosyadır.")
withdeyimi neden önemli?
withifadesi, dosya işlemleri sonrası dosyanın otomatik kapanmasını sağlar. Hata oluşsa bile dosya temiz şekilde kapatılır. Production kod yazarken her zaman tercih edin.
CSV Dosyaları
import csv
# Okuma:
with open("data.csv", newline='') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
print(row)
# Yazma:
with open("data.csv", "w", newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(["Name", "Age", "City"])
writer.writerow(["Alice", 30, "New York"])
JSON Dosyaları
import json
# Okuma:
with open("data.json", "r") as file:
data = json.load(file)
print(data)
# Yazma:
data = {"name": "Alice", "age": 25, "city": "New York"}
with open("data.json", "w") as file:
json.dump(data, file)
2. Hata Yönetimi
try-except Blokları
Hata oluşturabilecek kodları try içine yazar, hatayı except ile
yakalarız:
try:
num = int(input("Bir sayı girin: "))
print(10 / num)
except ZeroDivisionError:
print("Sıfıra bölme hatası!")
except ValueError:
print("Geçersiz sayı girdiniz!")
Çoklu except Kullanımı
try:
with open("not_exist.txt", "r") as file:
data = file.read()
except FileNotFoundError:
print("Dosya bulunamadı.")
except IOError:
print("Dosya okuma hatası.")
else ve finally Blokları
else—trybloğu başarılı olursa çalışırfinally— Hata olsa da olmasa da çalışır
try:
print(10 / 2)
except ZeroDivisionError:
print("Sıfıra bölme hatası!")
else:
print("İşlem başarılı.")
finally:
print("Bu kod her zaman çalışır.")
Sık Karşılaşılan Hata Türleri
TypeErrorValueErrorFileNotFoundErrorIndexErrorKeyError
Kendi Hata Sınıfı
class CustomError(Exception):
pass
try:
raise CustomError("Bu özel bir hata mesajıdır.")
except CustomError as e:
print(e)
raise ile Hata Fırlatma
def check_positive(num):
if num < 0:
raise ValueError("Negatif sayı giremezsiniz!")
return num
check_positive(-5) # ValueError: Negatif sayı giremezsiniz!
3. Nesne Tabanlı Programlama (OOP)
Class (Sınıf) Kavramı
Sınıf, bir nesne oluşturmanın temelidir. Özellikler (attributes) ve davranışlar (methods) tanımlar.
class Dog:
def __init__(self, name, breed):
self.name = name
self.breed = breed
def bark(self):
return f"{self.name} havlıyor!"
# Nesne oluşturma:
my_dog = Dog("Karabaş", "Golden Retriever")
print(my_dog.bark()) # Karabaş havlıyor!
__init__ ve self
__init__metodu, nesne oluşturulduğunda otomatik çalışırself, sınıfın o anki nesnesine referans verir
Class Attributes vs Instance Attributes
- Class attribute: Tüm nesneler tarafından paylaşılır
- Instance attribute: Her nesneye özeldir
class Circle:
pi = 3.14 # Class attribute (paylaşımlı)
def __init__(self, radius):
self.radius = radius # Instance attribute (her nesneye özel)
Class Methods
class Person:
population = 0
def __init__(self, name):
self.name = name
Person.population += 1
@classmethod
def get_population(cls):
return cls.population
Inheritance (Kalıtım)
Bir sınıfın başka bir sınıftan özellik ve metot miras almasıdır:
class Animal:
def speak(self):
return "Ses çıkarıyor."
class Dog(Animal):
def speak(self): # override
return "Hav hav!"
my_dog = Dog()
print(my_dog.speak()) # Hav hav!
Encapsulation (Kapsülleme)
Sınıfın iç durumunu dış dünyadan korumak için çift alt çizgi (__)
kullanılır:
class BankAccount:
def __init__(self, balance):
self.__balance = balance # private
def deposit(self, amount):
self.__balance += amount
def get_balance(self):
return self.__balance
account = BankAccount(1000)
account.deposit(500)
print(account.get_balance()) # 1500
4. Regular Expressions (Regex)
re modülü, metin desenleriyle arama / eşleştirme yapmamızı sağlar.
import re
text = "Bugün 22 derece, yarın 18 derece olacak."
pattern = r"\d+" # Sayılardan oluşan desen
matches = re.findall(pattern, text)
print(matches) # ['22', '18']
Temel Metotlar
match()— Metnin başında eşleşme ararsearch()— Metnin herhangi bir yerinde eşleşme ararfindall()— Tüm eşleşmeleri liste olarak döner
text = "Merhaba, 2024 yılı geldi!"
pattern = r"\d+"
# findall() tüm sayıları bulur
matches = re.findall(pattern, text)
print(matches) # ['2024']
# search() ilk eşleşmeyi bulur
search_result = re.search(pattern, text)
print(search_result.group()) # 2024
Özel Karakterler
\d— Bir rakam\D— Rakam olmayan karakter\w— Kelime karakteri (harf, rakam, alt çizgi)\W— Kelime olmayan karakter\s— Boşluk karakteri\S— Boşluk olmayan karakter
Grup Oluşturma
text = "Telefon numarası: 123-456-7890"
pattern = r"(\d{3})-(\d{3})-(\d{4})"
match = re.search(pattern, text)
if match:
print(match.group(1)) # 123
print(match.group(2)) # 456
print(match.group(3)) # 7890
Profesyonel İpuçları
- Dosya işlemleri yaparken her zaman
withkullanın — otomatik kapanma - Regex grupları karmaşık desen aramalarında veriyi düzenli yakalar
raiseile özel hatalarınızı fırlatarak kodunuzu daha esnek yapın- OOP ile büyük projeleri parçalara ayırın — kalıtım ve kapsülleme ile sürdürülebilirlik artar
Pekiştirme Soruları
- Bir dosyayı okuma ve yazma işlemlerini
withkullanarak gerçekleştirin - Bir CSV dosyasını okuyup veriyi bir listeye nasıl kaydedersiniz?
try-exceptile bir bölme işlemi yapın,ZeroDivisionError’ı yakalayın- Bir sınıf oluşturun,
__init__metodu ekleyin, bir nesne yaratın - Bir metindeki tüm rakamları regex ile bulun ve liste olarak döndürün
Günün Özeti
Bugün production seviyesi kod yazmanın temellerini öğrendik:
- Dosya I/O ve CSV/JSON çalışma
- Hata yönetimi ve özel hata sınıfları
- OOP: sınıf,
__init__, kalıtım, kapsülleme - Regex ile metin işleme
Yarın Gün 4’te asenkron programlama, veritabanı işlemleri ve API kullanımına geçeceğiz.