[Python] Renommez tous les fichiers image dans un dossier spécifique par date et heure de prise de vue

introduction

Comment gérez-vous les photos prises avec votre appareil photo mobile (smartphone)? Dans mon cas, après avoir pris une photo dans une certaine mesure, je la copie sur mon PC et je l'efface de mon smartphone pour ne pas laisser autant que possible une grande quantité de données sur mon smartphone. Cependant, si vous supprimez la photo de votre smartphone, le numéro de série du nom de fichier sera renvoyé, et lorsque vous essayez de le copier sur votre PC, un fichier du même nom sera créé, ce qui sera gênant. image.png

Ainsi, afin de résoudre le problème du brouillard de nom de fichier, je vais présenter une méthode pour renommer collectivement les fichiers image copiés sur le PC en utilisant la date et l'heure de prise de vue.

Environnement de vérification

Préparation préalable

$ pip3 install Pillow

code

rename_images.py


from PIL import Image
from PIL.ExifTags import TAGS
from pathlib import Path
import datetime

# https://www.lifewithpython.com/2014/12/python-extract-exif-data-like-data-from-images.html
def get_exif_of_image(file):
    """Get EXIF of an image if exists.

Fonction pour récupérer les données EXIF de l'image spécifiée
    @return exif_table Exif Un dictionnaire qui stocke des données
    """
    im = Image.open(file)

    #Obtenir des données Exif
    #S'il n'existe pas, il se termine tel quel. Renvoie un dictionnaire vide.
    try:
        exif = im._getexif()
    except AttributeError:
        return {}

    #Étant donné que les utilisateurs ne peuvent pas lire l'ID de balise tel quel, décodez-le
    #Stocker dans la table
    exif_table = {}
    for tag_id, value in exif.items():
        tag = TAGS.get(tag_id, tag_id)
        exif_table[tag] = value

    return exif_table

#Spécifiez le chemin du dossier côté PC qui contient l'image
for filename in Path("/path/to/images").glob("DSC_*.JPG"):
    exif = get_exif_of_image(filename)
    if "DateTimeOriginal" in exif:
        # strftime()Spécifiez le format du nouveau nom avec
        new_name = Path(filename).with_name(datetime.datetime.strptime(exif["DateTimeOriginal"], "%Y:%m:%d %H:%M:%S").strftime("IMG_%Y%m%d_%H%M%S.JPG"))
        print(f"{filename} \n -> {new_name}")
        filename.rename(new_name)
    else:
        print(f"[WARNING] {filename}: no EXIF header")

Commentaire

Extrayez la date et l'heure de prise de vue de l'en-tête EXIF du fichier image, créez un nouveau nom de fichier au format spécifié en fonction de la date et de l'heure de prise de vue et renommez-le.

for filename in Path("/path/to/images").glob("DSC_*.JPG"):La partie énumère les fichiers image contenus dans un dossier particulier.``DSC_*.JPG``Veuillez faire correspondre la partie de au format de fichier généré par l'application appareil photo de votre smartphone. Ce modèle est un exemple pour Xperia.



 Utilisez `` get_exif_of_image () '' pour obtenir les informations d'en-tête EXIF. Cette fonction est tirée de la page suivante. m (_ _) m
 [Astuces Python: Je souhaite obtenir les données Exif d'une image - Life with Python](https://www.lifewithpython.com/2014/12/python-extract-exif-data-like-data-from-images.html)

 La date et l'heure de prise de vue étant enregistrées sous le nom `` DateTimeOriginal '', la chaîne de caractères de date et d'heure est analysée par le module `` datetime ''. Ce format d'enregistrement doit être uniforme, il n'est donc pas nécessaire de personnaliser l'argument `` strptime () '' pour chaque caméra.
 Créez un nouveau nom de fichier basé sur ce résultat d'analyse. Changez l'argument de `` strftime () '' si vous le souhaitez. Cependant, je pense qu'il est préférable d'éviter les noms dans le même format que l'original, tels que `` DSC_% Y% m% d_% H% M% S.JPG``.

 Cliquez ici pour la signification des chaînes de format de `` strptime () '' et `` strftime () ''.
 [8.1. Datetime --- Types de date et d'heure de base - Documentation Python 3.6.12](https://docs.python.org/ja/3.6/library/datetime.html#strftime-strptime-behavior)

## Exemple d'exécution

 Le journal sera affiché comme indiqué ci-dessous. Assurez-vous que le fichier est renommé correctement.

/path/to/images/DSC_0001.JPG -> /path/to/images/IMG_20190928_135805.JPG /path/to/images/DSC_0004.JPG -> /path/to/images/IMG_20191104_172704.JPG /path/to/images/DSC_0005.JPG -> /path/to/images/IMG_20191106_174423.JPG /path/to/images/DSC_0006.JPG -> /path/to/images/IMG_20191106_174752.JPG /path/to/images/DSC_0007.JPG -> /path/to/images/IMG_20191106_174808.JPG /path/to/images/DSC_0009.JPG -> /path/to/images/IMG_20191213_180056.JPG /path/to/images/DSC_0010.JPG -> /path/to/images/IMG_20191213_180103.JPG /path/to/images/DSC_0011.JPG -> /path/to/images/IMG_20191213_180112.JPG


# Supplément

 Si possible, je pense qu'il vaut mieux le renommer côté smartphone au moment de la prise de vue.
 Vous pouvez utiliser ces applications sur Android. Je vais continuer à utiliser l'application à partir de maintenant.
 [Renommez automatiquement le nom du fichier lorsque vous prenez une photo à l'aide de "DSC Auto Rename" | Forget-so](http://wasure.net/dscautorename/#i)


Recommended Posts

[Python] Renommez tous les fichiers image dans un dossier spécifique par date et heure de prise de vue
Comment arrêter le programme jusqu'à une date et une heure spécifiques en python
Créez une commande pour supprimer tous les fichiers temporaires générés dans un dossier spécifique
[Python] Récupérez les fichiers dans le dossier avec Python
Pour représenter la date, l'heure, l'heure et les secondes en Python
Convertir la date et l'heure zonées en temps Unixtime dans Python2.7
2 façons de lire tous les fichiers csv dans un dossier
Trier par date en python
[Python] Créer une liste de dates et d'heures pour une période spécifiée
Obtenez la date et l'heure actuelles en Python, en tenant compte du décalage horaire
Python> Obtenir une liste de fichiers dans plusieurs répertoires> Utiliser glob | Trier par heure de modification
Obtenez de manière récursive la liste Excel dans un dossier spécifique avec python et écrivez-la dans Excel.
Donnez une date et une heure à la commande d'historique et collectez les fichiers d'historique de tous les utilisateurs avec un script
Déterminez le format de la date et de l'heure avec Python et convertissez-le en Unixtime
Manipuler des fichiers et des dossiers en Python
Exporter et exporter des fichiers en Python
Obtenez une liste de fichiers dans un dossier avec python sans chemin
Un mémo organisé en renommant les noms de fichiers dans le dossier avec python
Comment obtenir la différence de date et d'heure en secondes avec Python
Générer tous les fichiers avec une extension spécifique
Obtenir la date et l'heure au format spécifié
Lire tous les fichiers csv dans le dossier
Automatisez les tâches en manipulant des fichiers en Python
Lire et écrire des fichiers JSON avec Python
Créer en Python sans fichier image factice dans Django et tester le téléchargement de l'image
[Python] Créer une liste de date et d'heure (type datetime) pour une certaine période
Précautions lors de la création d'une vue qui réduit les enregistrements par date et heure
[Python] Je souhaite rassembler des fichiers spécifiques dispersés dans chaque dossier au même endroit
Organisez les modules et les packages Python dans le désordre
J'ai écrit une classe en Python3 et Java
Une manière intelligente de chronométrer le traitement avec Python
Lire et écrire des fichiers CSV et JSON avec Python
Comment obtenir les fichiers dans le dossier [Python]
[Python] Changer la couleur du texte et la couleur d'arrière-plan d'un mot clé spécifique dans la sortie d'impression
Une application cliente python qui télécharge et supprime des fichiers de S3 en spécifiant un compartiment
Vérifie s'il existe une chaîne de caractères spécifique pour tous les fichiers sous le répertoire Python et renvoie la ligne cible
Extraire "date actuelle uniquement" et "date et heure actuelles" avec python datetime.
Convertir le fuseau horaire de la date (décalage horaire) avec Python (à partir de la chaîne)
Inclure et utiliser des fichiers Kv externes avec Python Kivy
Regrouper par éléments consécutifs d'une liste en Python
Afficher un histogramme des valeurs de luminosité de l'image en python
Recherche récursive de fichiers et de répertoires en Python et sortie
Récapitulatif du traitement de la date en Python (datetime et dateutil)
Un moyen simple de visualiser le temps pris en Python et un moyen plus intelligent de l'améliorer
Programme Python qui recueille quotidiennement des tweets contenant des mots-clés spécifiques et les enregistre en csv