Hepsini Birleştirmek: Uçtan Uca Küçük Otomasyon Aracı
Bu derste ne yapacağız?
Kursun son dersinde, önceki derslerde öğrendiğimiz dosya işlemleri, Excel'e yazma, web'den veri çekme ve hata yönetimi konularını tek bir çalışan programda birleştireceğiz. Amacımız şu: internetten (veya örnek bir kaynaktan) veri çekecek, bu veriyi düzenleyecek, bir Excel dosyasına yazacak ve bu süreçte oluşabilecek hataları try/except ile yakalayarak programın çökmeden devam etmesini sağlayacak küçük bir otomasyon aracı yazmak.
Ön koşul: Bu kursun önceki derslerini tamamlamış olmanız, bilgisayarınızda Python'un kurulu olması ve requests ile openpyxl kütüphanelerinin yüklü olması gerekir. Kütüphaneler yüklü değilse komut satırında pip install requests openpyxl yazarak kurabilirsiniz. Arayüz ve kütüphane sürümleri zamanla değişebilir; kullandığınız sürümde küçük farklar görebilirsiniz.
Kavram
Bir otomasyon aracını, bir mutfaktaki üretim bandına benzetebiliriz. Bant üzerinde sırayla istasyonlar vardır: önce hammadde (veri) gelir, sonra bu hammadde işlenir (temizlenir, düzenlenir), sonunda paketlenip rafa konur (Excel dosyasına yazılır). Eğer bantın herhangi bir istasyonunda bir aksaklık olursa (örneğin hammadde bozuksa), tüm bandın durup kapanması yerine, o aksaklığı fark edip kenara ayırmak ve bandı çalışır durumda tutmak isteriz. İşte try/except yapısı, tam olarak bu kenara ayırma görevini üstlenir: hata oluşan noktada program durmaz, hatayı yakalar, kullanıcıya bilgi verir ve devam eder.
Bu derste kuracağımız araç dört adımdan oluşur: veri çekme, veri işleme, Excel'e yazma ve hata yönetimi. Her adımı ayrı bir fonksiyon olarak yazacağız, çünkü küçük ve tek işi yapan fonksiyonlar hem okunması hem de hata ayıklaması daha kolay programlar ortaya çıkarır.
Adım adım uygulama
- Adım 1 — Proje klasörünü hazırlayın. Masaüstünde veya belgelerinizde otomasyon_araci adında bir klasör oluşturun. Bu klasörün içine rapor_araci.py adında yeni bir dosya oluşturun.
- Adım 2 — Gerekli kütüphaneleri içe aktarın. Dosyanın en üstüne şu satırları yazın: import requests satırı web'den veri çekmemizi sağlayan kütüphaneyi getirir. import openpyxl satırı Excel dosyası oluşturup yazmamızı sağlayan kütüphaneyi getirir.
- Adım 3 — Veri çekme fonksiyonunu yazın. def veri_cek(adres): satırıyla bir fonksiyon tanımlayın. İçine try: yazın, altına bir girinti ile yanit = requests.get(adres, timeout=5) satırını ekleyin; bu satır belirtilen adrese bağlanıp veriyi indirmeye çalışır, timeout=5 ise sunucu beş saniyede yanıt vermezse beklemeyi durdurur. Altına yanit.raise_for_status() yazın; bu satır sunucudan hatalı bir yanıt (örneğin 404) geldiğinde bunu bir hataya dönüştürür. Sonra return yanit.json() yazın; bu, gelen veriyi Python'un anlayacağı bir yapıya (sözlük veya liste) çevirip fonksiyondan geri döndürür. try bloğunun altına aynı girinti seviyesinde except requests.exceptions.RequestException as hata: yazın ve altına print("Veri çekilemedi:", hata) ile return None ekleyin; böylece bağlantı kopması, adresin yanlış olması gibi durumlarda program çökmez, sadece bir uyarı yazıp boş bir sonuç döndürür.
- Adım 4 — Örnek bir veri kaynağı kullanın. Öğrenme amaçlı olarak, halka açık ve JSON formatında örnek veri döndüren bir test adresi kullanabilirsiniz; kendi projelerinizde bu adresi kendi ihtiyacınıza uygun gerçek bir API adresiyle değiştireceksiniz. Fonksiyonu çağırmak için dosyanın alt kısmına veriler = veri_cek("https://example.com/api/veri") satırını yazın. (Bu adres yalnızca örnektir; kendi API adresinizi kullanmanız gerekir.)
- Adım 5 — Veriyi işleme fonksiyonunu yazın. def veri_isle(veriler): satırıyla yeni bir fonksiyon tanımlayın. İçine try: yazıp altına, örneğin gelen liste içindeki her bir öğeden istediğiniz alanları (ad, değer gibi) seçen bir liste oluşturma kodu yazın: islenmis = [[oge["ad"], oge["deger"]] for oge in veriler] gibi bir satır, veri yapınıza göre değişebilir. Altına return islenmis yazın. except (KeyError, TypeError) as hata: satırını ekleyip altına print("Veri işlenirken sorun oluştu:", hata) ve return [] yazın; böylece beklenmedik bir veri yapısı gelirse program yine çökmez.
- Adım 6 — Excel'e yazma fonksiyonunu yazın. def excele_yaz(satirlar, dosya_adi): satırıyla bir fonksiyon tanımlayın. İçine try: yazıp altına calisma_kitabi = openpyxl.Workbook() ile yeni bir Excel dosyası oluşturun, sayfa = calisma_kitabi.active ile aktif sayfayı alın, sayfa.append(["Ad", "Değer"]) ile başlık satırını ekleyin. Ardından for satir in satirlar: sayfa.append(satir) ile her satırı tek tek Excel'e ekleyin, sonra calisma_kitabi.save(dosya_adi) ile dosyayı kaydedin ve print("Rapor kaydedildi:", dosya_adi) yazın. Altına except PermissionError as hata: ekleyip print("Dosya kaydedilemedi, açık olabilir:", hata) yazın; bu, Excel dosyası başka bir programda açıkken kaydetmeye çalışırsanız oluşan hatayı yakalar.
- Adım 7 — Fonksiyonları sırayla çağırın. Dosyanın en altına şu satırları ekleyin: if veriler: satırından sonra girintili olarak satirlar = veri_isle(veriler), ardından if satirlar: excele_yaz(satirlar, "rapor.xlsx") yazın. Bu yapı, her adımın bir öncekinin başarılı olmasına bağlı olarak çalışmasını sağlar; bir adım başarısız olursa (boş veya None döndürürse) sonraki adım hiç çalışmaz ve program hatasız şekilde sonlanır.
- Adım 8 — Programı çalıştırın. Komut satırında proje klasörüne gidip python rapor_araci.py yazın ve Enter tuşuna basın. Her şey yolunda giderse aynı klasörde rapor.xlsx adında bir dosya oluştuğunu göreceksiniz; bunu çift tıklayarak Excel'de açabilirsiniz.
Sık karşılaşılan sorunlar
| Hata / Belirti | Olası Neden ve Çözüm |
|---|---|
| ModuleNotFoundError: No module named 'requests' veya 'openpyxl' | Kütüphane yüklü değildir. Komut satırında pip install requests openpyxl yazıp yeniden çalıştırın. |
| Program hiçbir çıktı vermeden Excel dosyası oluşturmuyor | veri_cek fonksiyonu None döndürmüş olabilir; adresin doğru olduğundan ve internet bağlantınızın çalıştığından emin olun, ayrıca print ile ara sonuçları ekrana yazdırarak hangi adımda durduğunu kontrol edin. |
| KeyError: 'ad' gibi bir hata görülüyor | Gelen verinin yapısı beklediğinizden farklıdır; print(veriler) ile gelen veriyi ekrana yazdırıp gerçek alan adlarını kontrol edin ve kodunuzu buna göre düzenleyin. |
| PermissionError: dosya kaydedilemiyor | rapor.xlsx dosyası Excel'de açık olabilir; dosyayı kapatıp programı yeniden çalıştırın. |
| Excel dosyası açılıyor ama içi boş | veri_isle fonksiyonu boş bir liste döndürmüş olabilir; girdi verisinin doğru geldiğinden ve döngünün gerçekten çalıştığından emin olun. |
Mini görev
Bugüne kadar yazdığınız rapor_araci.py dosyasını genişletin: Excel'e yazarken her satıra bir de tarih sütunu ekleyin (bunun için datetime kütüphanesinden datetime.now() kullanabilirsiniz). Ayrıca excele_yaz fonksiyonunun başına, eğer satirlar listesi boşsa hiç dosya oluşturmadan bir uyarı mesajı yazdıran bir kontrol ekleyin.
- Kontrol listesi: Program, geçersiz bir adresle çalıştırıldığında çökmeden bir uyarı mesajı veriyor mu?
- Kontrol listesi: Excel dosyasında başlık satırı ve en az bir veri satırı görünüyor mu?
- Kontrol listesi: Tarih sütunu her satırda doğru şekilde görünüyor mu?
- Kontrol listesi: Boş veri durumunda dosya oluşturulmadan uyarı yazdırılıyor mu?
Kendini sına
1) Bir programda try/except kullanmanın amacı nedir?
2) requests.get() fonksiyonuna timeout parametresi eklemenin faydası nedir?
3) openpyxl kütüphanesi ne amaçla kullanılır?
4) Bir fonksiyon None döndürdüğünde, bu değeri sonraki adımda kullanmadan önce neden kontrol etmemiz gerekir?
5) Küçük ve tek işi yapan fonksiyonlar yazmanın hata ayıklama (debugging) açısından avantajı nedir?
Cevaplar
1) Programın, beklenmedik bir hata (bağlantı kopması, eksik veri gibi) oluştuğunda çökmesini önlemek ve hatayı kontrollü biçimde ele almak için kullanılır.
2) Sunucu yanıt vermediğinde programın süresiz beklemesini önler; belirtilen süre sonunda hata fırlatılır ve except bloğu bunu yakalayabilir.
3) Python içinden Excel (.xlsx) dosyaları oluşturmak, bu dosyalara satır ve sütun eklemek, mevcut dosyaları okumak ve düzenlemek için kullanılır.
4) Çünkü None üzerinde liste veya sözlük işlemleri yapmaya çalışmak (örneğin döngüye sokmak) yeni bir hataya yol açar; kontrol etmeden kullanmak programın çökmesine neden olabilir.
5) Her fonksiyon tek bir işten sorumlu olduğu için, bir sorun oluştuğunda hangi adımın hatalı çalıştığını daha kolay tespit edebilir, sorunu o fonksiyonla sınırlı tutup düzeltebilirsiniz.
Kapanış
Bu dersle birlikte kursu tamamladınız. Dosyalarla çalışmayı, Excel raporları oluşturmayı, web'den veri çekmeyi ve hataları zarifçe yönetmeyi öğrendiniz; bugün bunların hepsini tek bir küçük otomasyon aracında birleştirdiniz. Buradan sonraki adım, bu aracı kendi ihtiyaçlarınıza göre uyarlamak: farklı bir veri kaynağına bağlanmak, Excel raporuna grafik eklemek veya işlemi belirli aralıklarla otomatik tekrarlamak gibi geliştirmeler deneyebilirsiniz. Öğrendiğiniz temel yapı taşları (fonksiyonlar, try/except, dosya ve Excel işlemleri) ileride yazacağınız çok daha büyük projelerin de omurgasını oluşturacaktır. Emeğiniz için tebrikler.
Bu dersi kayıt olmadan izleyebilirsin. İlerlemeni kaydetmek, sertifika almak ve puan tablosuna girmek için ücretsiz üye ol: Kayıt Ol