2009-08-24 180 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值转换。这可用于处理存储在文件或网络连接中的二进制数据以及其他来源。

相关问题