Ou comment découvrir que des notions en programmation peuvent vous faciliter le quotidien…

Mais on va quand même éviter toute confusion : si vous cherchez une mise en œuvre plus simple que mon précédent article Renommer ses photos en masse avec Exiftool, ça ne va pas être le cas… Ici, je vais vous montrer comment faire plein de choses que Exiftool fait pour vous. Pourquoi réécrire ce que fait Exiftool ? Simplement pour pouvoir faire plus que ce que vous propose ce logiciel. Pour cela, le contenu de cet article est à voir comme une première étape.

Cet article n’a pas non plus pour but d’initier un néophyte à la programmation. Je pense avoir rendu les grandes lignes accessibles pour que vous puissiez voir ce que l’on peut faire et peut-être éveiller votre intérêt. Si vous avez déjà des notions, l’exemple ci-dessous n’est pas un exemple complet clef-en-main. Je vous proposerai prochainement des sources exécutables, mais gardez à l’esprit que si vous avez la possibilité de donner vous même des instructions à votre ordinateur, c’est pour adapter l’exécution à votre besoin.

Pourquoi Python ?

Pour donner des instructions à un ordinateur, il faut choisir un langage. Je ne vais pas m’étendre sur les différences entre eux et je vais faire simple : Python est un langage facile à apprendre et à mettre en pratique. Il est disponible sur toutes les plate-formes (Linux, Mac et même Windows). Python dispose d’une forte communauté qui fait vivre le langage et lui apporte de nouvelles fonctionnalités comme celles que nous allons voir. Enfin, ces caractéristiques font de Python le langage aujourd’hui le plus adapté à l’enseignement de la programmation.

Rappel : lister les fichiers en Python

Nous souhaitons récupérer la liste des fichiers du répertoire courant. Pour ce faire, en Python, il y a deux manières : soit en utilisant la fonction listdir du module os, soit en utilisant la fonction glob du module glob. La seconde permet de filtrer les fichiers par des motifs (par exemple uniquement les fichiers avec l’extension CR2). Comme je ne souhaite récupérer que les fichiers RAW issus de mon appareil, je vais utiliser la fonction glob :

Si votre répertoire contient des fichiers image avec plusieurs types d’extension, les charger est un peu plus complexe (et nous permet d’utiliser les listes en intension 🙂 ) :

Rappel : renommer les fichiers en Python

Renommer un fichier en Python se fait avec la fonction rename() du module os. Les deux paramètres sont évidemment le nom du fichier à renommer et le nom attendu :

Attention cependant, si un fichier portant le nom tel qu’il sera renommé existe, sur Linux ou Mac OS, il sera écrasé, sous Windows, cela provoquera une erreur. Il est donc plus prudent de vérifier l’existence d’un fichier avec le nom de destination avant de procéder à un renommage.

Récupérer la date de prise de vue

Je souhaite renommer mes fichiers photo en fonction de leur date de prise de vue. Celle-ci est contenue dans les données Exif du fichier photo. Pour lire ces données Exif, nous allons utiliser une librairie externe : ExifRead. Le lien explique comment installer cette dépendance.

ExifRead permet de charger toutes les données Exif sous forme d’un dictionnaire. Nous allons pouvoir récupérer la date à l’aide de sa clef, « EXIF DateTimeOriginal« . Cette date, si elle existe, est présente sous la forme d’une chaine de caractère qu’il sera possible de lire afin de créer un objet du type datetime. Le format correspond au motif ‘%Y:%m:%d %H:%M:%S’. Nous allons donc avoir :

Dans cet exemple de code, l’absence de la donnée Exif ou un mauvais format de date est gérée par une exception. Là je vous laisse libre de faire ce que vous voulez. La variable picture_date contient un objet de type datetime qui va nous faciliter la manipulation de la date de prise de vue et notamment la génération du nom de fichier de sortie. Le format que j’utilise est définit par le motif ‘%y%m%d-%H%M%S’. Celui-ci est passé en paramètre à la méthode strftime.

Renommer le fichier

Suite au code précédent, je peux donc générer le nom du fichier de destination et procéder à la copie pour les fichier dont j’ai pu récupérer une date par les instructions suivantes :

Avec tout ça, vous avez de quoi écrire votre propre programme pour renommer vos photos.

Mais pourquoi tout ça alors que nous avons des logiciels qui le font déjà ?

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 :

  • obtenir la liste des fichiers d’un répertoire et en particulier, comment n’obtenir que certains fichiers
  • utiliser une librairie externe
  • extraire des informations de ces fichiers et en particulier une métadonnée d’un fichier image
  • transformer cette donnée pour un autre usage, ici générer un nom pour renommer le fichier
  • effectuer quelques contrôles afin d’éviter les incidents.

Une première brique

Lorsqu’on écrit quelques lignes de code, c’est pour se faciliter la vie. Mais c’est aussi pour pouvoir les réutiliser pour autre chose. Sur la base de ce code, nous avons la possibilité d’exploiter d’autres métadonnées de la prise de vue. Mais nous avons aussi la possibilité d’exploiter cette métadonnée pour autre chose. Et si nous en profitions pour ranger automatiquement ces photos ? Ça va être très intéressant mais… Pour un prochain billet 😉

À 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.