Seite 1 von 1

"%+6f" escapen?

Verfasst: Montag 1. April 2024, 00:25
von jim10
Hallo!

Ich möchte exif Daten aus Bildern auslesen und erhalte die GPS Daten leider mit keinem (von mir versuchten exif Modul (exif, pyexif, exiv2,...).
Jetzt habe ich es mit subprocess versucht und erhalte die Daten (allerdings nicht im gewünschten Dezimalformat).
Dafür müsste ich folgendes aufrufen:

exiftoolout = subprocess.Popen(["exiftool -c "%+6f", file], stdout=subprocess.PIPE)

Aber ich schaffe es nicht "%+6f" richtig zu escapen.
Gibt es hier eine Möglichkeit?

exiftoolout = subprocess.Popen(["exiftool, file], stdout=subprocess.PIPE)
funktioniert, gibt mir allerdings die GPS Daten dann so aus:
47 deg 8\' 4.21" N
Das würde dann wieder Aufwand beim Umwandeln verursachen.

Beispiel für exiftool -c "%+6f" -a -gps:all uu.jpg
Da würde das ausgegeben:
GPS Longitude : +17.340048

Danke!

Jim

Re: "%+6f" escapen?

Verfasst: Montag 1. April 2024, 07:44
von __deets__
Das hat mit escapen nichts zu tun. Du musst die Argumente nur als Liste angeben. Du pappst aber dein Format Argument in den ersten Listeneintrag. Das wird dann als Exe gewertet, und eine mit diesem Namen gibt es nicht.

subprocess.Popen(["exiftool”, “-c”, "%+6f", file], stdout=subprocess.PIPE)

sollte das lösen. Achtung: ich tippe das hier mobil, und die Anführungszeichen sind ggf komisch, und müssen korrigiert werden.

Re: "%+6f" escapen?

Verfasst: Montag 1. April 2024, 10:27
von Sirius3
Und statt Popen benutzt man subprocess.run, weil man will ja nur das Ergebnis und keine komplizierte Kommunikation mit dem Programm.

Re: "%+6f" escapen?

Verfasst: Montag 1. April 2024, 11:18
von __blackjack__

Code: Alles auswählen

#!/usr/bin/env python3
import subprocess
from pathlib import Path
from pprint import pprint


def get_gps_data(file_path):
    result = {}
    for line in subprocess.run(
        ["exiftool", "-a", "-gps:all", "-c", "%+6f", str(file_path)],
        stdout=subprocess.PIPE,
        universal_newlines=True,
        check=True,
    ).stdout.splitlines():
        key, colon, value = line.partition(":")
        if colon != ":":
            raise ValueError(f"expected ':' in {line}")

        result[key.strip()] = value.strip()

    return result


def main():
    pprint(get_gps_data(Path.home() / "Downloads" / "Soundkarte.JPG"))


if __name__ == "__main__":
    main()

Re: "%+6f" escapen?

Verfasst: Dienstag 2. April 2024, 10:23
von jim10
Hallo!

Vielen Dank für euere Antworten!

Mit subprocess.run habe ich es nun geschafft und das Programm läuft wie es soll!

Hintergrund (falls jemand anderes auch dieses Problem haben sollte):
Ich habe mit dem Modul "exif" bisher die GPS Daten aus den Bildern ausgelesen.
Dann ist mir aufgefallen, dass sobald ich Bilder mit Digikam bearbeitet habe (Stichwörter hinzufügen, Dateien) das "exif" Modul keine GPS Daten mehr in den Bildern findet (andere hingegen schon wie z.B. Kameraname,..)
Auch einige andere Module aus "https://pypi.org/" brachten keine GPS Daten aus den Bildern (das kann aber auch an mir gelegen haben).
Mit dem Linux bash tool exiftool funktioniert es jetzt.