Dosya ve Klasör İşlerini Python Betikleriyle Otomatikleştirmek
Beceri rehberi

Dosya ve Klasör İşlerini Python Betikleriyle Otomatikleştirmek

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 6 dk okuma

Python ile dosyaları düzenleyin, taşıyın, adlandırın ve birleştirin: pathlib ve shutil ile adım adım yöntem, örnek senaryo ve sık yapılan hatalar.

Python ile dosya ve klasör otomasyonu ne işe yarar?

Her ekibin bilgisayarında aynı sorun vardır: indirilenler klasöründe yüzlerce karışık dosya, ay sonunda elle toplanan raporlar, adında "son" ve "yeni" kelimeleri art arda dizilmiş belgeler. Python bu işlerin çoğunu birkaç satırlık bir betiğe indirger. Dosyaları türüne ya da tarihine göre klasörlere dağıtmak, toplu yeniden adlandırmak, eski dosyaları arşive taşımak, yinelenen dosyaları bulmak ve onlarca CSV'yi tek tabloda birleştirmek tipik kullanım alanlarıdır.

Otomasyonun asıl kazancı hız değil, tutarlılıktır. Elle yapılan taşıma ve adlandırma işlemlerinde her insan farklı bir kural uygular; betik ise aynı kuralı her seferinde aynı biçimde işletir. Ayrıca yaptığı işi kayıt altına alabildiği için "bu dosya nereye gitti" sorusunun cevabı da her zaman elinizin altındadır.

Python'un standart kütüphanesi bu iş için yeterlidir; ek paket kurmadan başlayabilirsiniz. Başlıca araçlar şunlardır: • pathlib: yolları nesne olarak ele alır, dosya adı ve uzantısını ayrıştırır, klasör içinde arama yapar • shutil: dosya ve klasör kopyalama, taşıma, silme ve arşivleme işlemleri • os: ortam değişkenleri, klasör oluşturma ve işletim sistemi düzeyindeki işlemler • glob ve pathlib'in arama yöntemleri: desene uyan dosyaları bulma • csv ve json: dosya içeriklerini okuma ve yazma

Temel işlemler: yol, okuma, yazma, kopyalama

Dosya otomasyonunun ilk adımı yolları doğru yönetmektir. Metin olarak birleştirilen yollar işletim sistemine göre bozulur; pathlib ise Windows ile macOS'ta aynı kodun çalışmasına izin verir. Yol bir nesne olduğu için dosyanın adını, uzantısını, bulunduğu klasörü ve var olup olmadığını doğrudan sorgulayabilirsiniz.

Metin dosyası okurken ve yazarken karakter kodlamasını açıkça belirtmek, Türkçe karakterlerin bozulmasını önler. Büyük dosyalarda tamamını belleğe almak yerine satır satır okumak güvenlidir. Dosyayı açarken bir bağlam yöneticisi (with bloğu) kullanırsanız dosya iş bitince, hata olsa bile, kapanır.

Kopyalama ve taşıma için shutil kullanılır. Kopyalama kaynağı olduğu gibi bırakır, taşıma kaynağı kaldırır; bu fark otomasyonda kritiktir çünkü yanlış kurulmuş bir taşıma kuralı dosyaları yerinden eder. Hedef klasör yoksa önce oluşturmanız gerekir; pathlib'de klasörü ve eksik üst klasörleri tek çağrıyla oluşturabilirsiniz.

Silme işlemi geri alınamaz. Bu yüzden silme yerine önce bir "çöp" klasörüne taşımak ya da betiğe "deneme çalıştırması" modu eklemek iyi bir alışkanlıktır: betik gerçekten işlem yapmadan, yapacaklarını ekrana yazar, siz de kontrol edip onaylarsınız.

Dosyaları türüne göre düzenleyen betik

Klasik örnek, dağınık bir klasörü uzantıya göre düzenlemektir. Şu betik klasördeki dosyaları dolaşır, uzantıyı küçük harfe çevirir, kategori klasörünü gerekirse oluşturur ve aynı adlı dosya varsa üzerine yazmadan adın sonuna ek koyar:

from pathlib import Path import shutil

kaynak = Path.home() / "Downloads" kategoriler = {".pdf": "Belgeler", ".docx": "Belgeler", ".xlsx": "Tablolar", ".csv": "Tablolar", ".png": "Görseller", ".jpg": "Görseller"}

for dosya in kaynak.iterdir(): if not dosya.is_file(): continue klasor = kaynak / kategoriler.get(dosya.suffix.lower(), "Diğer") klasor.mkdir(exist_ok=True) hedef = klasor / dosya.name if hedef.exists(): hedef = klasor / (dosya.stem + "_kopya" + dosya.suffix) shutil.move(str(dosya), str(hedef)) print(dosya.name, "=>", hedef)

Aynı iskelet farklı kurallara uyarlanır. Tarihe göre düzenlemede dosyanın son değiştirilme zamanı okunur ve yıl-ay adlı klasörlere dağıtım yapılır. Toplu yeniden adlandırmada müşteri kodu, tarih ve belge türünden oluşan standart bir ad deseni uygulanır. Arşivlemede eski dosyalar shutil ile sıkıştırılıp arşiv klasörüne alınır. İlk denemede taşıma satırını yorum satırı yapıp yalnızca print çıktısını okumak, yanlış kuralın dosyaları yerinden etmesini önler.

Örnek senaryo: muhasebe ekibinin aylık fatura klasörü

Örneğin bir muhasebe ekibine tedarikçilerden e-posta ile PDF faturalar ve Excel mutabakat dosyaları geliyor; hepsi aynı paylaşımlı klasörde birikiyor. Ay sonunda biri bunları elle ayırıp ilgili ay klasörüne koyuyor, adlarını düzeltiyor ve kapanış için tablolardaki verileri birleştiriyor.

Betik şu işi görür. Önce gelen klasörü tarar. PDF'leri fatura klasörüne, Excel dosyalarını mutabakat klasörüne ayırır. Dosya adında tedarikçi kodu varsa bunu ayrıştırır ve dosyayı tedarikçi alt klasörüne yerleştirir. Ardından ay klasöründeki tüm Excel ve CSV dosyalarını pandas ile okuyup tek tabloda birleştirir ve kapanış raporuna girdi olarak kaydeder.

Betik kuralı karşılamayan dosyalarla karşılaşırsa (adı beklenen desene uymayan fatura gibi) onları sessizce atlamaz, "incelenecekler" klasörüne alıp log dosyasına not düşer. Böylece insan yalnızca istisnalara bakar, rutin dosyalar kendiliğinden yerine oturur. Betik her gece zamanlanmış görev olarak çalışırsa ay sonu yığılması da ortadan kalkar.

Dosya betiklerinde veri kaybettiren hatalar

Dosya otomasyonunda hatanın bedeli yüksektir, çünkü betik gerçek veriye dokunur. En sık görülen sorunlar ve önlemleri:

  • Üzerine yazma. Aynı adlı dosya varsa shutil sessizce üzerine yazabilir. Hedefin varlığını kontrol edin.
  • Yanlış klasörde çalıştırma. Göreli yollar betiğin nereden başlatıldığına göre değişir. Ana klasörü betiğin başında mutlak yol olarak tanımlayın.
  • Silme kurallarını ilk denemede canlıda çalıştırmak. Önce deneme modunda çıktıyı okuyun, sonra gerçek işlemi yapın.
  • Kilitli dosyayı hesaba katmamak. Başka bir program dosyayı açıksa taşıma hata verir. Hatayı yakalayıp dosyayı bir sonraki çalıştırmaya bırakın.
  • Gizli sistem dosyalarını fark etmemek. İşletim sisteminin oluşturduğu yardımcı dosyalar taşıma listesine girebilir; bunları açıkça dışlayın.
  • Kodlama sorunları. Türkçe karakter içeren dosya adları ve içerik, kodlama belirtilmediğinde bozulabilir.
  • Log tutmamak. Bir şey ters gittiğinde ne olduğunu geri izleyemezsiniz.

Önemli bir kural da yedektir: ilk haftalarda betik çalışmadan önce kaynak klasörün bir kopyasını alın. Güven oluştuktan sonra bu adımı kaldırabilirsiniz.

Dosya otomasyonunda öğrenme sırası

Başlangıç için masaüstünüzdeki ya da indirilenler klasörünüzdeki dağınıklığı çözen küçük bir betik yazın. Hedef, pathlib ile dosya listelemeyi, uzantı okumayı ve shutil ile taşımayı bir araya getirmektir. Bu aşamada Python temelleri (döngü, koşul, sözlük, fonksiyon) yeterlidir.

Orta düzeyde hata yönetimi, loglama ve komut satırı parametreleri eklenir: betik hangi klasörde çalışacağını dışarıdan alır, hata durumunda durmak yerine hatayı kaydedip devam eder. Dosya içeriklerini okuyup işleme (CSV birleştirme, Excel okuma) de bu aşamada gelir.

İleri düzeyde klasör izleme, çok sayıda dosyanın paralel işlenmesi, ağ paylaşımlarıyla ve bulut depolamayla çalışma ve zamanlanmış görevlerle tam otomasyon yer alır. Bu noktada betik artık bir araca dönüşmüştür: yapılandırma dosyasından kural okur, log üretir, hata olursa bildirim gönderir.

Dosya yığınlarıyla uğraşan ekipler için Mindset bağlamı

Mindset kataloğundaki Python Otomasyon ile Verimlilik programında Dosya ve Klasör Yönetimi Otomasyonu modülü bu konuyu doğrudan işler. Muhasebe, operasyon, insan kaynakları ve idari işler gibi her ay aynı dosya yığınını elle ayıran ekiplerde, ortak klasör standartlarını betiğe dökmek herkesin aynı düzeni uygulamasını sağlar; Zamanlanmış Görevler ve Süreç Yönetimi modülü bu betiklerin kendiliğinden çalışmasına zemin hazırlar.

İlgili Mindset programı

Python Otomasyon ile Verimlilik

Sık sorulanlar

Sık sorulan sorular

Python ile klasördeki tüm dosyaları nasıl listelerim?

pathlib ile klasör yolunu bir nesne olarak tanımlayıp içindeki öğeleri dolaşabilirsiniz. Alt klasörleri de kapsayan özyinelemeli arama için pathlib'in desen tabanlı arama yöntemi kullanılır; örneğin belirli bir uzantıya uyan tüm dosyaları bulabilirsiniz. Sonucu bir listeye alıp ad, uzantı ve değiştirilme zamanına göre süzmek mümkündür.

Dosya taşırken aynı adlı dosya varsa ne olur?

Varsayılan davranış işletim sistemine ve kullandığınız işleve göre değişir; bazı durumlarda dosyanın üzerine sessizce yazılır. Bunu önlemek için taşımadan önce hedef yolun var olup olmadığını kontrol edin. Varsa dosya adına tarih ya da sayaç ekleyin veya dosyayı incelenecekler klasörüne alın.

Python ile yüzlerce CSV dosyasını nasıl tek dosyada birleştiririm?

Klasördeki CSV dosyalarını pathlib ile bulur, her birini pandas ile okuyup bir listede toplar ve tek tabloya birleştirirsiniz. Dosyaların sütun adları ve kodlaması aynı olmalıdır; farklıysa birleştirmeden önce sütunları eşleyin. Hangi satırın hangi dosyadan geldiğini bilmek için bir kaynak sütunu eklemek izlemeyi kolaylaştırır.

Dosya otomasyonu betiği çalışırken Türkçe karakterler neden bozuluyor?

Sorun çoğunlukla dosya açılırken karakter kodlamasının belirtilmemesinden gelir. Metin dosyalarını açarken kodlamayı açıkça belirtin ve okuma ile yazmada aynı kodlamayı kullanın. Excel'den dışa aktarılan CSV dosyaları farklı kodlamada olabilir; böyle durumda dosyanın gerçek kodlamasını öğrenip ona göre okumak gerekir.

Betiği her gün otomatik çalıştırmak mümkün mü?

Evet. Betiği işletim sisteminin zamanlayıcısına (Windows görev zamanlayıcı ya da Linux ve macOS'ta cron) tanıtarak belirli saatlerde çalıştırabilirsiniz. Zamanlanmış çalışmada göreli yol kullanmamak, çıktıyı bir log dosyasına yazmak ve hata durumunda haber verecek bir mekanizma kurmak önemlidir.

Python ile Dosya ve Klasör İşlemlerini Otomatikleştirme