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
.txtuzantı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:
- Verilen dizindeki tüm girişleri listele.
- Eğer giriş bir klasörse, fonksiyon kendisini aynı klasör için tekrar çağırır (Özyinleme).
- Eğer giriş bir dosyaysa ve uzantısı
.txtise, 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çerisindepath.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
multiprocessingkullanarak 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ı