我還沒有測試過,但下面的函數應該可以解決你的問題。目前它完全讀取文件內容,創建一個緩衝區,然後寫出更新的內容。您也可以使用unpack_from
和pack_into
直接修改文件緩衝區,但可能會變慢(再次未經測試)。我正在使用struct.Struct
類,因爲您似乎想多次解壓相同的數字。
import os
import struct
from StringIO import StringIO
def modify_values(in_file, out_file, increment=1, num_code="i", endian="<"):
with open(in_file, "rb") as file_h:
content = file_h.read()
num = struct.Struct(endian + num_code)
buf = StringIO()
try:
while len(content) >= num.size:
value = num.unpack(content[:num.size])[0]
value += increment
buf.write(num.pack(value))
content = content[num.size:]
except Exception as err:
# handle
else:
buf.seek(0)
with open(out_file, "wb") as file_h:
file_h.write(buf.read())
另一種方法是使用array
,這很容易。我不知道如何用array
來實現永久性。
def modify_values(filename, increment=1, num_code="i"):
with open(filename, "rb") as file_h:
arr = array("i", file_h.read())
for i in range(len(arr)):
arr[i] += increment
with open(filename, "wb") as file_h:
arr.tofile(file_h)
你是什麼意思關於小端和大端......你只做一個或另一個 –