[Python] Benennen Sie alle Bilddateien in einem bestimmten Ordner nach Aufnahmedatum und -zeit um

Einführung

Wie verwalten Sie die mit Ihrer mobilen Kamera (Smartphone) aufgenommenen Fotos? In meinem Fall kopiere ich ein Bild nach einer gewissen Aufnahme auf meinen PC und lösche es von meinem Smartphone, damit ich nicht so viele Daten wie möglich auf meinem Smartphone belasse. Wenn Sie das Foto jedoch von Ihrem Smartphone löschen, wird die Seriennummer des Dateinamens zurückgegeben. Wenn Sie versuchen, es auf Ihren PC zu kopieren, wird eine Datei mit demselben Namen erstellt, was problematisch ist. image.png

Um das Problem des Dateinamensnebels zu lösen, werde ich eine Methode einführen, mit der die auf den PC kopierten Bilddateien unter Verwendung des Aufnahmedatums und der Aufnahmedauer gemeinsam umbenannt werden können.

Überprüfungsumgebung

Vorbereitungen

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

Funktion zum Abrufen von EXIF-Daten des angegebenen Bildes
    @return exif_table Exif Ein Wörterbuch, in dem Daten gespeichert werden
    """
    im = Image.open(file)

    #Exif-Daten abrufen
    #Wenn es nicht existiert, endet es so wie es ist. Gibt ein leeres Wörterbuch zurück.
    try:
        exif = im._getexif()
    except AttributeError:
        return {}

    #Da die Tag-ID nicht gelesen werden kann, dekodieren Sie sie
    #In der Tabelle aufbewahren
    exif_table = {}
    for tag_id, value in exif.items():
        tag = TAGS.get(tag_id, tag_id)
        exif_table[tag] = value

    return exif_table

#Geben Sie den Pfad des Ordners auf der PC-Seite an, der das Image enthält
for filename in Path("/path/to/images").glob("DSC_*.JPG"):
    exif = get_exif_of_image(filename)
    if "DateTimeOriginal" in exif:
        # strftime()Geben Sie das Format des neuen Namens mit an
        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")

Kommentar

Extrahieren Sie das Aufnahmedatum und die Aufnahmedauer aus dem EXIF-Header der Bilddatei, erstellen Sie einen neuen Dateinamen im angegebenen Format basierend auf Aufnahmedatum und -zeit und benennen Sie ihn um.

for filename in Path("/path/to/images").glob("DSC_*.JPG"):Der Teil listet die in einem bestimmten Ordner enthaltenen Bilddateien auf.``DSC_*.JPG``Bitte passen Sie den Teil an das Dateiformat an, das von der Kameraanwendung Ihres Smartphones generiert wurde. Dieses Muster ist ein Beispiel für Xperia.



 Verwenden Sie `` get_exif_of_image () ``, um die EXIF-Header-Informationen abzurufen. Diese Funktion wird von der folgenden Seite übernommen. m (_ _) m
 [Python-Tipps: Ich möchte Exif-Daten eines Bildes - Leben mit Python erhalten](https://www.lifewithpython.com/2014/12/python-extract-exif-data-like-data-from-images.html)

 Da das Aufnahmedatum und die Aufnahmezeit mit dem Namen "DateTimeOriginal" aufgezeichnet werden, wird die Zeichenfolge für Datum und Uhrzeit vom Modul "datetime" analysiert. Dieses Aufnahmeformat sollte einheitlich sein, sodass das Argument "strptime ()" nicht für jede Kamera angepasst werden muss.
 Erstellen Sie basierend auf diesem Analyseergebnis einen neuen Dateinamen. Ändern Sie das Argument von `` strftime () ``, wenn Sie möchten. Es ist jedoch am besten, Namen im gleichen Format wie das Original zu vermeiden, z. B. "DSC_% Y% m% d_% H% M% S.JPG".

 Klicken Sie hier, um die Bedeutung der Formatzeichenfolgen von `` strptime () `` und `` strftime () `` anzuzeigen.
 [8.1. Datetime --- Grundlegende Datums- und Zeittypen - Python 3.6.12-Dokumentation](https://docs.python.org/ja/3.6/library/datetime.html#strftime-strptime-behavior)

## Ausführungsbeispiel

 Das Protokoll wird wie unten gezeigt angezeigt. Stellen Sie sicher, dass die Datei korrekt umbenannt wurde.

/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


# Ergänzung

 Wenn möglich, denke ich, ist es besser, es zum Zeitpunkt der Aufnahme auf der Smartphone-Seite umzubenennen.
 Sie können diese Apps auf Android verwenden. Ich werde die App von nun an weiter nutzen.
 [Benennen Sie den Dateinamen automatisch um, wenn Sie ein Foto mit "DSC Auto Rename" | Forget-so aufnehmen](http://wasure.net/dscautorename/#i)


Recommended Posts

[Python] Benennen Sie alle Bilddateien in einem bestimmten Ordner nach Aufnahmedatum und -zeit um
So stoppen Sie das Programm bis zu einem bestimmten Datum und einer bestimmten Uhrzeit in Python
Erstellen Sie einen Befehl zum Löschen aller temporären Dateien, die in einem bestimmten Ordner generiert wurden
[Python] Holen Sie sich die Dateien mit Python in den Ordner
Zur Darstellung von Datum, Uhrzeit, Uhrzeit und Sekunden in Python
Konvertieren Sie Datum und Uhrzeit in Zeitzonen in Unixtime in Python2.7
2 Möglichkeiten, alle CSV-Dateien in einem Ordner zu lesen
Sortieren nach Datum in Python
[Python] Erstellen Sie eine Datums- und Zeitliste für einen bestimmten Zeitraum
Holen Sie sich das aktuelle Datum und die aktuelle Uhrzeit in Python unter Berücksichtigung des Zeitunterschieds
Python> Eine Liste der Dateien in mehreren Verzeichnissen abrufen> Glob verwenden | Nach Änderungszeit sortieren
Rufen Sie die Excel-Liste rekursiv in einem bestimmten Ordner mit Python ab und schreiben Sie sie in Excel.
Geben Sie dem Befehl history ein Datum und eine Uhrzeit ein und sammeln Sie Verlaufsdateien aller Benutzer mit einem Skript
Bestimmen Sie das Datums- und Uhrzeitformat mit Python und konvertieren Sie es in Unixtime
Bearbeiten Sie Dateien und Ordner in Python
Exportieren und Ausgeben von Dateien in Python
Ruft eine Liste der Dateien in einem Ordner mit Python ohne Pfad ab
Ein Memo, das durch Umbenennen der Dateinamen im Ordner mit Python organisiert wird
So ermitteln Sie mit Python den Unterschied zwischen Datum und Uhrzeit in Sekunden
Generieren Sie alle Dateien mit einer bestimmten Erweiterung
Datum und Uhrzeit im angegebenen Format abrufen
Lesen Sie alle CSV-Dateien im Ordner
Automatisieren Sie Jobs, indem Sie Dateien in Python bearbeiten
Lesen und schreiben Sie JSON-Dateien mit Python
Testen Sie das Hochladen von Bildern, indem Sie in Python erstellen, ohne Dummy-Bilddateien in Django zu platzieren
[Python] Erstellen Sie eine Liste mit Datum und Uhrzeit (Datum / Uhrzeit-Typ) für einen bestimmten Zeitraum
Vorsichtsmaßnahmen beim Erstellen einer Ansicht, die Datensätze nach Datum und Uhrzeit eingrenzt
[Python] Ich möchte bestimmte Dateien, die in jedem Ordner verteilt sind, an einem Ort sammeln
Organisieren Sie Python-Module und -Pakete in einem Chaos
Ich habe eine Klasse in Python3 und Java geschrieben
Eine clevere Möglichkeit zur Zeitverarbeitung mit Python
Lesen und Schreiben von CSV- und JSON-Dateien mit Python
So erhalten Sie die Dateien im Ordner [Python]
[Python] Ändern Sie die Textfarbe und Hintergrundfarbe eines bestimmten Schlüsselworts in der Druckausgabe
Eine Python-Client-App, die Dateien aus S3 herunterlädt und löscht, indem ein Bucket angegeben wird
Überprüft, ob für alle Dateien im Verzeichnis Python eine bestimmte Zeichenfolge vorhanden ist, und gibt die Zielzeile aus
Extrahieren Sie "Nur aktuelles Datum" und "Aktuelles Datum und Uhrzeit" mit Python datetime.
Konvertieren Sie die Datumszeitzone (Zeitdifferenz) mit Python (aus Zeichenfolge).
Schließen Sie externe Kv-Dateien in Python Kivy ein und verwenden Sie sie
Gruppieren Sie nach aufeinanderfolgenden Elementen einer Liste in Python
Zeigen Sie ein Histogramm der Bildhelligkeitswerte in Python an
Suchen Sie rekursiv nach Dateien und Verzeichnissen in Python und geben Sie sie aus
Zusammenfassung der Datumsverarbeitung in Python (Datum / Uhrzeit und Datum)
Eine einfache Möglichkeit, die in Python benötigte Zeit anzuzeigen und sie intelligenter zu verbessern
Python-Programm, das täglich Tweets mit bestimmten Schlüsselwörtern sammelt und in CSV speichert