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
"%+6f" escapen?
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.
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.
- __blackjack__
- User
- Beiträge: 13680
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
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()
„Incorrect documentation is often worse than no documentation.“ — Bertrand Meyer
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.
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.