2009-08-24 71 views
8

我希望能夠打開一個圖像文件和額外的十六進制值逐字節。我不知道如何做到這一點,令人驚訝的是,「python字節編輯」和「python字節數組」沒有提出任何問題。有人可以指向我需要使用的圖書館,具體方法我可以谷歌,或教程/指南?Python - 如何編輯字節的十六進制文件字節

+0

這是你想要以編程方式做的事嗎?或者你在尋找一個十六進制編輯器? – 2009-08-24 14:09:23

+0

@david:我想我想以編程的方式。在我的自定義圖像文件中,有7個尺寸定義每個像素,並且它們通過在所有7個維度基本遞增而被組織在一個塊中。我想撤消它,分離所有7個維度,並重新組合它們,以便它們符合圖像的TIF文件規範。我認爲最好以編程方式完成,是的? – sepiroth 2009-08-24 14:15:20

+0

我想通過PIL庫做TIFF部分。 – Nelson 2009-08-24 14:17:36

回答

8

Python標準庫有mmap模塊,它可以用來做到這一點。查看the documentation瞭解更多信息。

+1

+1。通常情況下,我會將文件加載到內存中來編輯,因爲如果文件可能很長,mmap會更好。當然,如果這個文件非常*很長,並且不適合你的地址空間,它會重新打開(path,'r + b')和seek()... – bobince 2009-08-24 13:59:22

+0

@bobince:在你的地點意見將文件「太長」去與某事的答案和邁向mmap? – sepiroth 2009-08-24 14:32:30

+0

@hatorade:標準打開/讀取/關閉可以處理與可用內存一樣大的文件,但使用mmap()可以提高性能,因爲只有您修改的頁面纔會從磁盤讀取。我估計當文件達到兆字節左右時,顯着的性能差異將會很明顯。 – 2009-08-24 17:15:54

4

的Hachoir框架是一組Python庫和工具來分析和編輯二進制文件:

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

它具有常見的文件類型的知識,所以這可能只是你需要什麼。

10

取決於你想這樣做可能足以open the file in binary mode並與正常file函數讀取數據的內容:

# 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並不真正關心如果data字符串包含「二元」或「文本「數據。如果你只是想對一個合理大小的文件進行簡單的修改,這可能就足夠了。

+0

是的,我只是想打開一個自定義圖像文件並將其轉換爲.tiff。這可能是個訣竅,因爲我基本上是「撤消」用於在自定義圖像文件中分配像素數據的算法,並按照.tif規範重新組織它 – sepiroth 2009-08-24 14:09:01

1

查看stuct模塊。

該模塊執行Python值和表示爲Python字符串的C結構之間的轉換。它使用格式化字符串(下面解釋)作爲C結構佈局的緊湊描述以及預期的Python值轉換。這可用於處理存儲在文件或網絡連接中的二進制數據以及其他來源。