noch lernen Python. Ich arbeite derzeit an einem Python-Code, der Metadaten (usermade Keywords) aus Bildern extrahiert. Ich habe bereits Pillow AND exif ausprobiert, aber dies schließt die vom Benutzer erstellten Tags oder Schlüsselwörter aus. Mit applist konnte ich die Metadatei einschließlich meiner Schlüsselwörter erfolgreich extrahieren, aber als ich versuchte, sie mit ElementTree zu extrahieren, um die Teile von Interesse zu extrahieren, erhalte ich nur leere Daten.Schlüsselwörter extrahieren Form Bilder mit Python
Meine XML-Datei sieht wie folgt aus (nach einiger Manipulation):
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:description>
<rdf:Seq>
<rdf:li xml:lang="x-default">South Carolina, Olivyana, Kumasi</rdf:li>
</rdf:Seq>
</dc:description>
<dc:subject>
<rdf:Bag>
<rdf:li>Kumasi</rdf:li>
<rdf:li>Summer 2016</rdf:li>
<rdf:li>Charlestone</rdf:li>
<rdf:li>SC</rdf:li>
<rdf:li>Beach</rdf:li>
<rdf:li>Olivjana</rdf:li>
</rdf:Bag>
</dc:subject>
<dc:title>
<rdf:Seq>
<rdf:li xml:lang="x-default">P1050365</rdf:li>
</rdf:Seq>
</dc:title>
</rdf:Description>
<rdf:Description rdf:about=""
xmlns:aux="http://ns.adobe.com/exif/1.0/aux/">
<aux:SerialNumber>F360908190331</aux:SerialNumber>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
Mein Code sieht wie folgt aus:
import xml.etree.ElementTree as ET
from PIL import Image, ExifTags
with Image.open("myfile.jpg") as im:
for segment, content in im.applist:
marker, body = content.split(b'\x00', 1)
if segment == 'APP1' and marker == b'http://ns.adobe.com/xap/1.0/':
data = body.decode('"utf-8"')
print (data)
an dieser Stelle ist es möglich was't passieren diese an den Parser da es eine leere Zeile einen Fehler zurückgegeben:
tree = ET.parse(data)
ValueError: embedded null byte
so nach dem Entfernen wir die Daten in einer xML-Datei gespeichert (th XML-Daten e oben) und an den Parser übergeben, aber keine Daten zu erhalten:
tree = ET.parse('mytags.xml')
tags = tree.findall('xmpmeta/RDF/Description/subject/Bags')
print (type(tags))
print (len(tags))
<class 'list'>
0
Interessanterweise habe ich die Tags in der Form der XML-Datei (d.h. 'x: xmpmeta' :), ich erhalte den folgenden Fehler:
SyntaxError: prefix 'x' not found in prefix map
Vielen Dank für Ihre Hilfe.
Fabio
Was ist es genau, dass Sie als Ausgang wollen? –
Es sollte möglich sein, mit ElementTree zu parsen, also poste bitte den Code, der nicht funktioniert hat. –
Codes hinzugefügt, es gab eine Reihe kleiner Probleme, die ich auch beheben wollte. Ich bin an den Tags rdf: li> interessiert. –