4
我想製作一個python腳本,它將編輯我加載的文件的十六進制值,並且卡住了。我怎樣才能十六進制編輯一個文件在Python中逐字節?我怎樣才能在python2中逐字節編輯文件?
我想製作一個python腳本,它將編輯我加載的文件的十六進制值,並且卡住了。我怎樣才能十六進制編輯一個文件在Python中逐字節?我怎樣才能在python2中逐字節編輯文件?
如果文件非常大,而且您只進行覆蓋操作(無插入或刪除操作),則mmap
模塊允許您將文件視爲基本上大的可變字符串。這使您可以逐字節地編輯文件的內容,或編輯整個切片,而無需實際將其全部加載到內存中(mmap
對象將根據需要延遲地將文件的部分內存加載到內存中)。
使用起來有點麻煩,但在需要時它非常強大。
實施例:
$ 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)的定製生成器即可。 – lolopop
看到模塊結構如果它想要你想 – cheneydeng
@pythonm:'file.read(1)'在一個循環中對於一個大文件來說真的很慢。 – nneonneo