Ranger ses photos, en Python

Dans mon article précédent, pour renommer nos photos en Python, je vous ai montré comment obtenir la date de prise de vue et nous avons utilisé cette information pour renommer le fichier. Puisque nous avons cette information, 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. Vous avez tout de même un exemple d’usage sur mon Github.

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.

Je vais bien évidemment utiliser pathlib pour construire ces chemins. Un objet Path contient la méthode .expanduser() est pour information, celle-ci utilise à os.path.expanduser pour récupérer la bonne information et la transforme la chaine de caractères.

from pathlib import Path

photos_root_dir = Path("~/Photos/Masters/").expanduser()

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.

year_path = photos_root_dir / str(picture_date.year)
year_path.mkdir(exist_ok=True)

Ma méthode .mkdir() fonctionne comme la fonction os.makedirs et 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. Nous pouvons ici faire appel à shutil.move qui ne nécessite que le répertoire de destination.

import shutil

shutil.move(current_file, year_path)

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.

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

Vous aimerez aussi...

1 réponse

  1. 7 mai 2018

    […] en profitions pour ranger automatiquement ces photos ? Ça va être très intéressant mais… Pour un prochain billet […]

Laisser un commentaire

En naviguant sur Dad 3.0, vous acceptez l’utilisation de cookies pour une navigation optimale et nous permettre de réaliser des statistiques de visites. Plus d'informations

Le blog Dad 3.0 utilise les cookies pour vous permettre une navigation optimale et nous permettre de réaliser des statistiques de visite. Dad 3.0 affichant des publicités, celles-si utilisent également des cookies pour un ciblage publicitaire. En continuant la navigation sur Dad 3.0, vous acceptez le dépôt et la lecture de cookies.

Fermer