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.
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.
$ pip3 install Pillow
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")
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