2009-08-24 7 views
8

Ich möchte in der Lage sein, eine Bilddatei zu öffnen und die hexadezimalen Werte Byte für Byte zu ergänzen. Ich habe keine Ahnung, wie dies zu tun ist und googeln "Python-Byte-Bearbeitung" und "Python-Byte-Array" kam überraschenderweise nicht mit irgendetwas. Kann mir jemand auf die Bibliothek verweisen, die ich benutzen muss, spezifische Methoden, die ich googlen kann, oder Tutorials/Anleitungen?Python - Wie hexadezimale Datei byteweise bearbeiten

+0

Möchten Sie programmgesteuert programmieren? Oder suchst du einen Hexeditor? –

+0

@david: Ich denke, ich möchte es programmgesteuert machen. In meiner benutzerdefinierten Bilddatei gibt es 7 Dimensionen, die jedes Pixel definieren, und sie sind in einem Stück organisiert, indem sie in allen 7 Dimensionen inkrementiert werden. Ich möchte das rückgängig machen, alle 7 Dimensionen trennen und sie so zusammenfügen, dass sie der TIF-Dateispezifikation für Bilder entsprechen. Ich denke, das sollte am besten programmatisch gemacht werden, ja? – sepiroth

+0

Ich würde den TIFF-Teil über die PIL-Bibliothek tun. – Nelson

Antwort

8

Python-Standardbibliothek verfügt über ein mmap-Modul, mit dem genau dies möglich ist. Weitere Informationen finden Sie unter the documentation.

+1

+1. Normalerweise würde ich die Datei in den Speicher laden, um sie wie in sths Antwort zu bearbeiten, aber wenn die Datei sehr lang ist, ist mmap besser. Natürlich, wenn die Datei sehr * sehr * lang ist und nicht in Ihren Adressraum passt, ist es wieder zu öffnen (Pfad, 'r + b') und suchen() ... – bobince

+0

@bobince: an welchem ​​Punkt in Ihrem Meinung würde eine Datei "zu lang" sein, um mit etw zu gehen und auf mmap zu gehen? – sepiroth

+0

@hatorade: Standard öffnen/lesen/schließen kann Dateien so groß wie verfügbarer Speicher verarbeiten, aber Sie werden Leistungsverbesserungen mit mmap() sehen, da nur die Seiten, die Sie ändern, von der Festplatte gelesen werden. Ich würde schätzen, dass signifikante Leistungsunterschiede offensichtlich sind, wenn die Datei ein Megabyte oder so erreicht. –

4

Der Hachoir Rahmen ist eine Reihe von Python-Bibliothek und Tools zu analysieren und bearbeiten Binärdateien:

http://pypi.python.org/pypi/hachoir-core

Es verfügt über Kenntnisse in gängigen Dateitypen, so könnte dies genau das, was Sie brauchen.

10

Je nachdem, was Sie tun möchten, könnte es zu open the file in binary mode und lesen die Daten mit den normalen Funktionen file genug sein:

# load it 
f = open("somefile", 'rb') 
data = f.read() 
f.close() 

# do something with data 
data.reverse() 

# save it 
f = open("somefile.new", 'wb') 
f.write(data) 
f.close() 

Python nicht wirklich, ob die data Zeichenfolge „binäre“ oder " Text "Daten. Wenn Sie nur einfache Änderungen an einer Datei von angemessener Größe vornehmen möchten, ist dies wahrscheinlich gut genug.

+0

Ja, ich möchte nur eine benutzerdefinierte Bilddatei öffnen und in .tiff konvertieren. Dies könnte der Trick sein, da ich im Grunde genommen den Algorithmus "rückgängig" mache, der verwendet wird, um die Pixeldaten in der benutzerdefinierten Bilddatei zuzuweisen und sie gemäß den TIF-Spezifikationen zu reorganisieren – sepiroth

1

Überprüfen Sie das Modul stuct.

Dieses Modul führt Konvertierungen zwischen Python-Werten und C-Strukturen durch, die als Python-Strings dargestellt werden. Es verwendet Formatzeichenfolgen (im Folgenden erläutert) als kompakte Beschreibungen des Layouts der C-Structs und der beabsichtigten Konvertierung in/aus Python-Werten. Dies kann bei der Verarbeitung von Binärdaten verwendet werden, die unter anderem in Dateien oder von Netzwerkverbindungen gespeichert werden.