Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python2中逐字节对文件进行十六进制编辑?_Python_Hex - Fatal编程技术网

如何在python2中逐字节对文件进行十六进制编辑?

如何在python2中逐字节对文件进行十六进制编辑?,python,hex,Python,Hex,我正在尝试制作一个python脚本,该脚本将编辑我加载的文件的十六进制值,我被卡住了。如何在python中对文件逐字节进行十六进制编辑???如果文件非常大,并且您只执行覆盖操作(没有插入或删除),则模块允许您将文件本质上视为一个大的可变字符串。这允许您逐字节编辑文件内容,或编辑整个片段,而无需将其全部加载到内存中(对象将根据需要惰性地将部分文件加载到内存中或从内存中取出) 使用起来有点麻烦,但在需要的时候它非常强大 例如: $ xxd data 0000000: a15e a0fb 4455 1

我正在尝试制作一个python脚本,该脚本将编辑我加载的文件的十六进制值,我被卡住了。如何在python中对文件逐字节进行十六进制编辑???

如果文件非常大,并且您只执行覆盖操作(没有插入或删除),则模块允许您将文件本质上视为一个大的可变字符串。这允许您逐字节编辑文件内容,或编辑整个片段,而无需将其全部加载到内存中(对象将根据需要惰性地将部分文件加载到内存中或从内存中取出)

使用起来有点麻烦,但在需要的时候它非常强大

例如:

$ xxd data
0000000: a15e a0fb 4455 1d0f b104 1506 0e88 08d6  .^..DU..........
0000010: 8795 d6da 790d aafe 9d6a 2ce5 f7c3 7c97  ....y....j,...|.
0000020: 4999 ab6b c728 352e b1fd 88e0 6acf 4e7d  I..k.(5.....j.N}
$ python
>>> import mmap
>>> f = open('data', 'a+')
>>> m = mmap.mmap(f.fileno(), 0)
>>> m[24:48]
'\x9dj,\xe5\xf7\xc3|\x97I\x99\xabk\xc7(5.\xb1\xfd\x88\xe0j\xcfN}'
>>> m[24:48] = 'a'*24
>>> m.close()
>>> f.close()
>>> ^D
$ xxd data
0000000: a15e a0fb 4455 1d0f b104 1506 0e88 08d6  .^..DU..........
0000010: 8795 d6da 790d aafe 6161 6161 6161 6161  ....y...aaaaaaaa
0000020: 6161 6161 6161 6161 6161 6161 6161 6161  aaaaaaaaaaaaaaaa

我会将文件加载到一个字节数组中,您可以在适当的位置进行更改。否则,如果文件太大,只需通过自定义生成器循环生成file.read(1)。如果需要,请参阅模块结构want@pythonm:
file.read(1)
对于一个大文件来说,循环中的读取速度非常慢。