Dans mon article précédent, pour renommer nos photos en Python, il était nécessitait d’extraire l’information de la date de prise de vue. Tant que nous avons cette information, autant essayer de faire plus que changer le nom du fichier. Et si j’en profitais pour vous montrer comment ranger automatiquement des photos ?

Comme pour le billet précédent, je ne rentre pas dans tous les détails pour l’écriture d’un programme complet car l’ensemble dépend de ce que vous voulez faire. Je vous proposerai quand même quelque chose quand j’aurai fait le tour ce ces billets.

Ce billet vous donnera des pistes pour créer un petit programme qui rangera automatiquement vos photos. Ici, vous allez donc voir comment déplacer chaque photo dans un répertoire année.

Définir le répertoire des photos

Tout ne peut pas se faire automatiquement et le programme aura besoin d’une information minimum, c’est à dire dans quel répertoire stocker les photos. Je vais définir que je les range par année (« 2016 », « 2015 »… ) dans un répertoire « Photos/Masters » dans mon répertoire personnel.

Je vais donc définir une variable photos_root_dir qui sera le chemin (l’arborescence de répertoires) vers la racine de cette arborescence (l’endroit où vous voulez ranger vos photos). Pour que ce code soit portable, j’utilise le caractère spécial pour déclarer le home. Ce code fonctionnera donc aussi bien sous Windows, Linux ou Mac. Et pour que Python sache quel est ce home, il faut faire appel à os.path.expanduser qui récupère la bonne information et la transforme la chaine de caractères.

Ainsi, sur ma machine (Mac, donc système type Unix), cette variable contiendra la chaine de caractères « /Users/dad3zero/Photos/Masters/ ».

Déplacer les photos dans un répertoire par année

Pour déplacer les photos, il faut le chemin de destination. La partie précédente a définit la racine de l’arborescence de répertoires. Il faut maintenant récupérer l’année de prise de vue. Dans l’article précédent, nous avons extrait la date pour chaque photo sous la forme d’un objet de type datetime. Je vais l’utiliser pour accéder à l’information de l’année qui est une propriété de cet objet. Elle servira à créer le chemin vers où déplacer le fichier. Il suffit dans un premier temps de concaténer le nom du répertoire de référence et l’année puis de créer ce répertoire avec ce nouveau chemin.

La fonction os.makedirs va créer l’arborescence complète de répertoires. Si cette arborescence existe, l’appel à cette fonction lève une exception. Sauf si l’option exist_ok est à True. Ainsi, ce code peut être exécuté dans la boucle pour chaque photo. Il créera l’arborescence pour la première photo de chaque année et ne plantera pas aux suivantes.

Il suffit maintenant de déplacer le fichier. L’appel à shutil.move ne nécessite que le répertoire de destination.

Ici, current_file est une variable qui contient le nom du fichier à déplacer. Si vous placez ces instructions après avoir renommé la photo dans le code précédent, vous pouvez utiliser la variable rename_name.

 

Apprenez et développez

L’aspect pédagogique

Même si ce billet n’est pas un cours complet de Python, l’aspect pédagogique est la raison pour laquelle je détaille certaines notions. Nous avons vu comment :

  • créer une arborescence de répertoires
  • extraire une caractéristique d’une information (l’année de la date)
  • déplacer un fichier dans un répertoire

Un traitement personnalisé

Je vous avais dit dans le billet précédent qu’il n’était pas nécessaire d’écrire un programme pour faire ce que des logiciels tout fait font déjà. Vous aviez bien vu que la mise en œuvre est bien plus compliquée. Mais vos besoins dépassent régulièrement ce que peuvent faire ces logiciels. C’est ce que nous avons mis en œuvre ici : en plus que de renommer les photos, le programme va les ranger sans que vous ayez vous même à créer un répertoire et couper/coller vos fichiers.

Ah… Mais vous ne rangez pas simplement par année mais aussi par évènement ? Et bien nous aborderons ce sujet la prochaine fois 😉

À propos de... Darko Stankovski

iT guy, photographe et papa 3.0, je vous fais partager mon expérience et découvertes dans ces domaines. Vous pouvez me suivre sur les liens ci-dessous.