1. Dosya İşlemleri

Dosya Açma Modları

Python’da dosya işlemleri için open() fonksiyonu kullanılır:

# Dosya açma ve okuma:
file = open("example.txt", "r")
print(file.read())
file.close()

Dosya Okuma Metotları

# 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.")

with deyimi neden önemli?

with ifadesi, 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ı

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

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

Class Attributes vs Instance Attributes

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

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

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ı

  1. Dosya işlemleri yaparken her zaman with kullanın — otomatik kapanma
  2. Regex grupları karmaşık desen aramalarında veriyi düzenli yakalar
  3. raise ile özel hatalarınızı fırlatarak kodunuzu daha esnek yapın
  4. 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ı

  1. Bir dosyayı okuma ve yazma işlemlerini with kullanarak gerçekleştirin
  2. Bir CSV dosyasını okuyup veriyi bir listeye nasıl kaydedersiniz?
  3. try-except ile bir bölme işlemi yapın, ZeroDivisionError’ı yakalayın
  4. Bir sınıf oluşturun, __init__ metodu ekleyin, bir nesne yaratın
  5. 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:

Yarın Gün 4’te asenkron programlama, veritabanı işlemleri ve API kullanımına geçeceğiz.