Cas d'utilisation
/
Automatisation des tâches personnelles
Créez des scripts et des outils personnalisés pour rationaliser les tâches de routine et améliorer l'efficacité
modèle
•
Claude 3.7 Sonnet
Écrivez un script Python multiplateforme qui analyse mon dossier Téléchargements toutes les heures et renomme et déplace automatiquement les fichiers image dans des sous-dossiers datés.
Organisateur automatique de fichiers d'images
Voici un script Python multiplateforme qui analyse votre dossier Téléchargements toutes les heures, identifie les fichiers image et les organise en sous-dossiers datés en fonction de leurs dates de création/modification :
1import os
2import shutil
3import time
4import datetime
5import schedule
6import platform
7import logging
8from pathlib import Path
9from PIL import Image
10from PIL.ExifTags import TAGS
11
12# Set up logging
13logging.basicConfig(
14 level=logging.INFO,
15 format='%(asctime)s - %(levelname)s - %(message)s',
16 handlers=[
17 logging.FileHandler("image_organizer.log"),
18 logging.StreamHandler()
19 ]
20)
21
22def get_downloads_folder():
23 """Get the downloads folder path based on the operating system"""
24 if platform.system() == "Windows":
25 return os.path.join(os.path.expanduser("~"), "Downloads")
26 elif platform.system() == "Darwin": # macOS
27 return os.path.join(os.path.expanduser("~"), "Downloads")
28 else: # Linux and other Unix-like
29 return os.path.join(os.path.expanduser("~"), "Downloads")
30
31def get_image_date(file_path):
32 """Extract date from image metadata or use file modification date"""
33 try:
34 # Try to get date from EXIF data
35 with Image.open(file_path) as img:
36 exif_data = img._getexif()
37 if exif_data:
38 for tag_id, value in exif_data.items():
39 tag = TAGS.get(tag_id, tag_id)
40 if tag == "DateTimeOriginal":
41 # Parse the date string (format: YYYY:MM:DD HH:MM:SS)
42 date_str = value.split()[0].replace(":", "-")
43 return date_str
44 except (AttributeError, KeyError, IndexError, TypeError, OSError):
45 pass
46
47 # Fall back to file modification time
48 mod_time = os.path.getmtime(file_path)
49 date_str = datetime.datetime.fromtimestamp(mod_time).strftime('%Y-%m-%d')
50 return date_str
51
52def is_image_file(file_path):
53 """Check if the file is an image based on extension"""
54 image_extensions = {'.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.webp', '.heic'}
55 return os.path.splitext(file_path.lower())[1] in image_extensions
56
57def organize_images():
58 """Scan downloads folder and organize images into date-based folders"""
59 downloads_folder = get_downloads_folder()
60 logging.info(f"Scanning {downloads_folder} for images...")
61
62 # Create a base folder for organized images
63 organized_folder = os.path.join(downloads_folder, "Organized_Images")
64 if not os.path.exists(organized_folder):
65 os.makedirs(organized_folder)
66
67 # Get all files in downloads folder
68 files = [f for f in os.listdir(downloads_folder) if os.path.isfile(os.path.join(downloads_folder, f))]
69
70 # Counter for renamed files
71 moved_count = 0
72
73 for file_name in files:
74 file_path = os.path.join(downloads_folder, file_name)
75
76 # Skip the script itself and non-image files
77 if not is_image_file(file_path):
78 continue
79
80 try:
81 # Get date from image
82 date_str = get_image_date(file_path)
83
84 # Create date folder if it doesn't exist
85 date_folder = os.path.join(organized_folder, date_str)
86 if not os.path.exists(date_folder):
87 os.makedirs(date_folder)
88
89 # Generate a unique name for the file
90 file_ext = os.path.splitext(file_name)[1]
91 new_file_name = f"{date_str}_{int(time.time())}_{moved_count}{file_ext}"
92 new_file_path = os.path.join(date_folder, new_file_name)
93
94 # Move and rename the file
95 shutil.move(file_path, new_file_path)
96 logging.info(f"Moved: {file_name} -> {new_file_path}")
97 moved_count += 1
98
99 except Exception as e:
100 logging.error(f"Error processing {file_name}: {str(e)}")
101
102 logging.info(f"Organized {moved_count} images")
103
104def main():
105 """Main function to schedule and run the image organization task"""
106 logging.info("Image Organizer started")
107
108 # Run once at startup
109 organize_images()
110
111 # Schedule to run every hour
112 schedule.every(1).hour.do(organize_images)
113
114 # Keep the script running
115 while True:
116 schedule.run_pending()
117 time.sleep(60) # Check every minute
118
119if __name__ == "__main__":
120 main()
Comment utiliser ce script
- Installation des packages requis:
1pip install pillow schedule- Exécutez le script:
- Il détectera automatiquement votre dossier de téléchargements en fonction de votre système d'exploitation
- Les images seront organisées dans un dossier appelé « Organized_Images » dans votre dossier Téléchargements
- Chaque image sera placée dans un sous-dossier nommé avec sa date de création (YYYY-MM-DD)
- Les images seront renommées avec le modèle : Date_Timestamp_Counter.extension
- Caractéristiques:
- Multiplateforme (fonctionne sous Windows, macOS et Linux)
- Utilise les données EXIF lorsqu'elles sont disponibles pour déterminer la date de l'image
- Revient à la date de modification du fichier lorsque les données EXIF ne sont pas disponibles
- Enregistre toutes les actions à la fois sur la console et dans un fichier journal
- Fonctionne une fois au démarrage, puis toutes les heures par la suite
- Gère les erreurs avec élégance
- Pour exécuter le script en arrière-plan:
- Sous Windows : créer une tâche planifiée
- Sur MacOS/Linux : utilisez des tâches cron ou créez un service
Le script continuera à s'exécuter jusqu'à ce que vous l'arrêtiez, en vérifiant votre dossier Téléchargements toutes les heures et en organisant tous les nouveaux fichiers image.
Explorez les cas d'utilisation associés
Découvrez l'assistant IA de Ninja
Essayez gratuitement dès aujourd'hui. Forfaits à partir de 19$ par mois.


