Eine SVG
Datei ist im Grunde eine XML
Datei, daher könnte ich die Zeichenkette <?xml
(oder die hexadezimale Darstellung: '3c 3f 78 6d 6c'
) als magische Zahl verwenden, aber es gibt ein paar entgegengesetzte Gründe, dies nicht zu tun zum Beispiel gibt es zusätzliche Leerzeichen, die diesen Check durchbrechen könnten.
Die anderen Bilder, die ich überprüfen muss, sind alle Binärdateien und haben magische Zahlen. Wie kann ich schnell überprüfen, ob die Datei ein SVG
-Format ist, ohne die Erweiterung eventuell mit Python zu benutzen?
XML muss nicht mit der Präambel <?xml
beginnen, daher ist das Testen dieses Präfix keine gute Erkennungstechnik - ganz zu schweigen davon, dass jedes XML als SVG identifiziert wird. Eine anständige Erkennung und wirklich einfach zu implementieren ist es, einen echten XML-Parser zu verwenden, um zu testen, ob die Datei wohlgeformtes XML ist, das das Element svg
auf oberster Ebene enthält:
Die Verwendung von cElementTree
stellt sicher, dass die Erkennung durch die Verwendung von expat effizient ist; timeit
zeigt, dass eine SVG-Datei als solche in ~ 200μs und eine Nicht-SVG in 35μs erkannt wurde. Die iterparse
API ermöglicht es dem Parser, auf das Erstellen der gesamten Elementstruktur (ungeachtet des Modulnamens) zu verzichten und nur den Anfangsteil des Dokuments zu lesen, unabhängig von der Gesamtdateigröße.
Tags und Links python xml svg file-format magic-numbers