URL: https://linuxfr.org/forums/programmation-python/posts/peripherique-carte-sd Title: Périphérique carte SD Authors: espéranto Date: 2025年06月22日T14: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() ```