Python ile Özyinilemeli Dosya ve Kelime Sayacı Geliştirmek

Büyük veri setleriyle veya yüzlerce metin belgesiyle çalışırken, hangi klasörde ne kadar içerik olduğunu manuel olarak kontrol etmek imkansızdır. Özellikle dijital arşivler, e-kitap koleksiyonları veya günlük kayıtları analiz ederken, dosya sistemini otomatik olarak tarayabilen küçük araçlar hayat kurtarıcı olur.

Bu yazıda; Python’un güçlü pathlib kütüphanesini ve programlamanın temel taşlarından biri olan özyinleme (recursion) kavramını kullanarak, bir dizindeki tüm .txt dosyalarını bulan ve toplam kelime sayısını hesaplayan bir uygulama geliştireceğiz.

🚀 Uygulamanın Yetenekleri

Bu araç, basit görünmesine rağmen dosya sistemi yönetimi konusunda kritik birkaç özelliği beraberinde getirir:

  • Derinlemesine Tarama: Sadece ana klasörü değil, iç içe geçmiş tüm alt klasörleri (recursive) otomatik olarak gezer.
  • Akıllı Filtreleme: Binlerce dosya arasından yalnızca .txt uzantılı olanları seçerek işler.
  • Hızlı Kelime Analizi: Her bir metin dosyasının içeriğini okuyup toplam kelime sayısını anlık olarak hesaplar.
  • Özet Raporlama: Tüm işlem bittiğinde toplam kaç dosyanın tarandığını ve toplam kaç kelime bulunduğunu raporlar.

🛠️ Kodun Anatomisi

Proje, hem nesne yönelimli programlama (OOP) prensiplerini hem de fonksiyonel yaklaşımları dengeli bir şekilde kullanır.

Proje Bilgileri

  • Yazar: Ahmet Aksoy
  • Tarih: 19 Nisan 2026
  • Ortam: Python 3.12 / Ubuntu 24.04
  • Kütüphaneler: pathlib (Standart Kütüphane)

Temel Bileşenler

1. Durum Yönetimi: FileCounter Sınıfı

Özyinleme sırasında değişkenlerin değerlerini kaybetmemek ve toplamları merkezi bir yerde tutmak için basit bir sayaç sınıfı kullandık. Bu sayede count ve total_words değişkenleri, fonksiyon çağrıları arasında güvenle taşınır.

2. Dosya Okuma ve Sayma

count_words_in_file fonksiyonu, bir dosyanın içeriğini okuyup split() metodunu kullanarak boşluklara göre ayırır. Bu yöntem, metni kelimelere bölmenin en hızlı ve pratik yoludur.

3. Özyinlemenin Gücü: process_txt_files

Bu fonksiyon, projenin kalbidir. Mantık şu şekilde çalışır:

  1. Verilen dizindeki tüm girişleri listele.
  2. Eğer giriş bir klasörse, fonksiyon kendisini aynı klasör için tekrar çağırır (Özyinleme).
  3. Eğer giriş bir dosyaysa ve uzantısı .txt ise, kelime sayısını hesaplar ve genel toplama ekler.

🔍 Teknik Detaylar ve Kod Analizi

Python 3.4 ile gelen pathlib modülü, geleneksel os.path yöntemlerine göre çok daha modern ve okunabilir bir yapı sunar. Kodda kullandığımız Path nesnesi sayesinde dosya yollarını birer obje olarak yönetebiliyoruz.

# Özyinleme mantığının kısa bir örneği
def process_txt_files(path, counter):
    entries = [file for file in path.glob("*") if file.is_file()]

    for entry_name in entries:
        entry_path = path.joinpath(entry_name)

        if entry_path.is_dir():
            # Klasör bulduk! İçine girip tekrar ara.
            process_txt_files(entry_path, counter)
        elif entry_path.is_file() and (entry_name.suffix == ".txt"):
            # Metin dosyası bulduk! Kelimeleri say.
            counter.count += 1
            counter.total_words += count_words_in_file(entry_path)

Kritik Noktalar

  • glob("*"): Dizindeki her şeyi yakalamamızı sağlar.
  • suffix: Dosya uzantısını kontrol ederek sadece metin belgeleriyle çalışmamızı garanti eder.
  • Hata Yönetimi: main() fonksiyonu içerisinde path.exists() kontrolü yapılarak, geçersiz bir yol verildiğinde programın çökmesi engellenmiştir.

💡 Sonuç ve Geliştirme Önerileri

Bu uygulama, dosya sistemi işlemleri ve özyinleme mantığını anlamak için mükemmel bir başlangıç projesidir. Eğer bu aracı daha profesyonel bir hale getirmek isterseniz şu özellikleri ekleyebilirsiniz:

  • Çoklu Uzantı Desteği: Kullanıcının hangi uzantıları (örneğin .md, .csv, .log) saymak istediğini seçebileceği bir parametre ekleyin.
  • Hızlandırma: Çok büyük veri setleri için multiprocessing kullanarak dosyaları paralel olarak sayın.
  • İstatistikler: Sadece toplam kelimeyi değil, en çok kullanılan kelimeleri (word frequency) bulan bir analiz modülü ekleyin.

Ahmet Aksoy

Not: Bu yazıda incelediğimiz kodu ve benzer projelerin kaynak kodlarını https://github.com/ahmetax/practical-python-examples adresinde bulabilirsiniz.


#python #pathlib #recursion #filemanagement #otomasyon #kelimesayacı

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir