URL:     https://linuxfr.org/forums/programmation-python/posts/peripherique-carte-sd
Title:   Périphérique carte SD
Authors: espéranto
Date:    2025-06-22T14:02:05+02:00
License: CC By-SA
Tags:    stockage et carte_mémoire
Score:   1


Bonjour

Je cherche à faire coder un petit script permettant : 

1. Aller chercher en mode récursif les fichiers avec l'extension ".NEF" sur la carte SD que j'enfiche dans mon ordinateur portable. Les fichiers sont dans 2 sous niveaux de dossiers.

2. Renommer ces fichiers en les numérotant sur 5 chiffres (ex: 00001.NEF)

3. Sauvegarder sur le disque dur le dernier numéro à prendre pour que la numérotation continue à la prochaine recherche sur la carte SD.

4. Créer (ou tester) l'existence du dossier Images sur le disque dur de mon ordinateur sous Linux Debian, créer ou tester la présence d'un sous répertoire pour l'année en cours (pas celle des images) et créer ou tester un sous répertoire du quantième du jour. Et disposer les images de la carte SD dans le dossier du quantième du jour.

J'en ai besoin pour ma pratique de photographe amateur.

J'ai demandé à l'IA de faire cela. Le script fonctionne sauf qu'il ne trouve pas ma carte SD enfichée dans mon ordinateur. Il trouve bien mon disque dur externe mais pas le lecteur de carte SD.

---------------------------------------------------------------------------------------
Je cherche la solution pour que la carte SD soit accéssible avec ce script que je vous indique ici :

```python
#!/usr/bin/env python3
import os
import shutil
import sys
import time
from datetime import datetime

# Configuration
BASE_DIR = os.path.expanduser("~/Images")
NUM_FILE = os.path.join(BASE_DIR, "last_number.txt")
FILE_TYPES = ['.NEF', '.JPG', '.JPEG', '.CR2', '.ARW', '.DNG']  # Ajoutez d'autres extensions si nécessaire

def get_removable_devices():
    """Retourne la liste des périphériques amovibles montés"""
    devices = []
    with open('/proc/mounts', 'r') as f:
        for line in f:
            parts = line.split()
            if parts[1].startswith('/media/philippe/') or parts[1].startswith('/mnt/'):
                devices.append(parts[1])
    return devices

def get_next_number():
    """Récupère ou initialise le prochain numéro de fichier"""
    try:
        with open(NUM_FILE, 'r') as f:
            last_num = int(f.read().strip())
    except (FileNotFoundError, ValueError):
        last_num = 0
    
    return last_num + 1

def update_last_number(number):
    """Met à jour le dernier numéro utilisé"""
    os.makedirs(os.path.dirname(NUM_FILE), exist_ok=True)
    with open(NUM_FILE, 'w') as f:
        f.write(str(number))

def get_target_path(file_path):
    """Détermine le chemin cible basé sur la date du fichier"""
    # Essayez d'abord avec la date de modification
    mtime = os.path.getmtime(file_path)
    file_date = datetime.fromtimestamp(mtime)
    
    year = file_date.year
    day_of_year = file_date.timetuple().tm_yday
    
    # Crée les dossiers si nécessaire
    year_dir = os.path.join(BASE_DIR, str(year))
    day_dir = os.path.join(year_dir, f"{day_of_year:03d}")
    
    os.makedirs(day_dir, exist_ok=True)
    
    return day_dir

def copy_and_rename_files():
    """Copie et renomme les fichiers des périphériques amovibles"""
    devices = get_removable_devices()
    if not devices:
        print("Aucun périphérique amovible détecté.")
        return
    
    next_num = get_next_number()
    files_copied = 0
    
    for device in devices:
        print(f"Traitement du périphérique: {device}")
        for root, _, files in os.walk(device):
            for file in files:
                ext = os.path.splitext(file)[1].upper()
                if ext in FILE_TYPES:
                    src_path = os.path.join(root, file)
                    try:
                        target_dir = get_target_path(src_path)
                        new_name = f"{next_num:05d}{ext.lower()}"
                        dest_path = os.path.join(target_dir, new_name)
                        
                        # Copie le fichier
                        shutil.copy2(src_path, dest_path)
                        print(f"Copié: {src_path} -> {dest_path}")
                        
                        next_num += 1
                        files_copied += 1
                    except Exception as e:
                        print(f"Erreur lors du traitement de {src_path}: {e}")
    
    if files_copied > 0:
        update_last_number(next_num - 1)
        print(f"\n{files_copied} fichiers copiés. Dernier numéro utilisé: {next_num - 1}")
    else:
        print("Aucun fichier correspondant trouvé.")

def main():
    print("=== Script de copie et organisation de fichiers ===")
    print(f"Base directory: {BASE_DIR}")
    
    try:
        copy_and_rename_files()
    except KeyboardInterrupt:
        print("\nOpération annulée par l'utilisateur.")
        sys.exit(1)
    except Exception as e:
        print(f"Une erreur s'est produite: {e}")
        sys.exit(1)

if __name__ == "__main__":
    main()
```




