Caso d'uso

/

Automazione delle attività personali

Crea script e strumenti personalizzati per semplificare le attività di routine e aumentare l'efficienza

Modello

Sonetto Claude 3.7

Scrivi uno script Python multipiattaforma che scansiona la mia cartella Download ogni ora e rinomina e sposta automaticamente i file di immagine in sottocartelle con data e data.

Prova Query
Sonetto Claude 3.7
/
programmatore

Organizzatore automatico di file di immagini

Ecco uno script Python multipiattaforma che esegue la scansione della cartella Download ogni ora, identifica i file di immagine e li organizza in sottocartelle con data e data in base alle date di creazione/modifica:

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()

Come usare questo script

  1. Installa i pacchetti richiesti:
1pip install pillow schedule
  1. Esegui lo script:
    • Rileverà automaticamente la cartella Download in base al tuo sistema operativo
    • Le immagini verranno organizzate in una cartella denominata «Organized_Images» all'interno della cartella Download
    • Ogni immagine verrà inserita in una sottocartella denominata con la data di creazione (AAAA-MM-GG)
    • Le immagini verranno rinominate con il modello: Date_timestamp_counter.extension
  2. Caratteristiche:
    • Multipiattaforma (funziona su Windows, macOS e Linux)
    • Utilizza i dati EXIF quando disponibili per determinare la data dell'immagine
    • Ritorna alla data di modifica del file quando i dati EXIF non sono disponibili
    • Registra tutte le azioni sia nella console che in un file di registro
    • Viene eseguito una volta all'avvio e successivamente ogni ora
    • Gestisce gli errori con garbo
  3. Per eseguire lo script in background:
    • In Windows: crea un'attività pianificata
    • Su macOS/Linux: usa i cron job o crea un servizio

Lo script continuerà a funzionare finché non lo interromperai, controllando la cartella Download ogni ora e organizzando eventuali nuovi file di immagine.

Esplora i casi d'uso correlati

Prova l'Assistente AI di Ninja

Provalo gratuitamente oggi. Piani a partire da 19 dollari al mese.