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?
pathlibWindows, 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}sayesinde001, 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?