Anwendungsfall
/
Automatisierung persönlicher Aufgaben
Erstellen Sie benutzerdefinierte Skripts und Tools, um Routineaufgaben zu optimieren und die Effizienz zu steigern
Modell
•
Claude 3.7 Sonett
Schreiben Sie ein plattformübergreifendes Python-Skript, das meinen Download-Ordner jede Stunde scannt und Bilddateien automatisch umbenennt und in Unterordner mit Datumsstempel verschiebt.
Automatischer Bilddatei-Organizer
Hier ist ein plattformübergreifendes Python-Skript, das deinen Download-Ordner jede Stunde scannt, Bilddateien identifiziert und sie anhand ihres Erstellungs-/Änderungsdatums in Unterordnern mit Datumsstempel organisiert:
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()
Wie benutzt man dieses Script
- Erforderliche Pakete installieren:
1pip install pillow schedule- Führen Sie das Skript aus:
- Es erkennt automatisch Ihren Download-Ordner basierend auf Ihrem Betriebssystem
- Bilder werden in einem Ordner namens „Organized_Images“ in Ihrem Download-Ordner organisiert
- Jedes Bild wird in einen Unterordner gelegt, der mit seinem Erstellungsdatum benannt ist (YYYY-MM-DD)
- Bilder werden mit dem Muster umbenannt: Date_TimeStamp_Counter.Extension
- Funktionen:
- Plattformübergreifend (funktioniert unter Windows, macOS und Linux)
- Verwendet EXIF-Daten, sofern verfügbar, um das Bilddatum zu bestimmen
- Fällt auf das Änderungsdatum der Datei zurück, wenn EXIF-Daten nicht verfügbar sind
- Protokolliert alle Aktionen sowohl in der Konsole als auch in einer Protokolldatei
- Läuft einmal beim Start und danach jede Stunde
- Behandelt Fehler ordnungsgemäß
- Um das Skript im Hintergrund auszuführen:
- Unter Windows: Erstellen Sie eine geplante Aufgabe
- Unter macOS/Linux: Verwenden Sie Cron-Jobs oder erstellen Sie einen Dienst
Das Skript läuft weiter, bis Sie es beenden. Es überprüft stündlich Ihren Download-Ordner und organisiert alle neuen Bilddateien.
Erkunden Sie verwandte Anwendungsfälle
Erlebe Ninjas KI-Assistenten
Testen Sie es noch heute kostenlos. Pläne ab 19 USD/Monat.


