Python ile klasördeki dosyaları toplu yeniden adlandırma (hazır script)

Telefondan aktardığın yüzlerce fotoğraf IMG_20240512_103344.jpg gibi isimlerle mi geliyor? Aşağıdaki script, bir klasördeki dosyaları tarih + sıra numarası formatında yeniden adlandırır. Önce deneme modunda çalışır, hiçbir şeyi değiştirmeden ne yapacağını gösterir.

# toplu_adlandir.py
# Kullanım:  python toplu_adlandir.py "C:/Fotograflar" --onek tatil --uygula
import argparse
from datetime import datetime
from pathlib import Path

UZANTILAR = {".jpg", ".jpeg", ".png", ".heic", ".mp4"}

def main():
    p = argparse.ArgumentParser(description="Dosyaları toplu yeniden adlandır")
    p.add_argument("klasor", type=Path)
    p.add_argument("--onek", default="dosya", help="Yeni isimlerin başına gelecek kelime")
    p.add_argument("--uygula", action="store_true", help="Vermezsen sadece önizleme yapar")
    a = p.parse_args()

    dosyalar = sorted(
        (f for f in a.klasor.iterdir() if f.is_file() and f.suffix.lower() in UZANTILAR),
        key=lambda f: f.stat().st_mtime,  # değiştirilme tarihine göre sırala
    )
    if not dosyalar:
        print("Uygun dosya bulunamadı.")
        return

    for i, f in enumerate(dosyalar, start=1):
        tarih = datetime.fromtimestamp(f.stat().st_mtime).strftime("%Y-%m-%d")
        yeni = f.with_name(f"{a.onek}_{tarih}_{i:03d}{f.suffix.lower()}")
        if yeni.exists():
            print(f"ATLANDI (zaten var): {yeni.name}")
            continue
        print(f"{f.name}  ->  {yeni.name}")
        if a.uygula:
            f.rename(yeni)

    if not a.uygula:
        print("\nBu bir önizlemeydi. Değişiklik için komutun sonuna --uygula ekle.")

if __name__ == "__main__":
    main()

Neden böyle yazdık?

  • pathlib Windows, Linux ve macOS’ta aynı şekilde çalışır; \ / / derdi yok.
  • Varsayılan önizleme modu: yanlış klasörde çalıştırsan bile hiçbir dosya bozulmaz.
  • Aynı isimde dosya varsa üzerine yazmaz, atlar.
  • {i:03d} sayesinde 001, 002 … 120 şeklinde sıralama dosya gezgininde de doğru görünür.

Sorusu olan, geliştirmek isteyen buraya yazsın. Örneğin EXIF çekim tarihini kullanan sürümü ister misiniz?