我有一个字节文件,由整数组成,每个占用4个字节的空间。我也有我的python代码中的函数,它应该在给定索引的情况下切换文件中的两个元素。
索引0是第一个4字节整数,索引1是第二批4个字节,依此类推。
我如何在我的代码中实现这一点?
我坚持两者 - 解码然后只回写更改。我想我可以使用fileinput将这条单行作为字符串处理,但我不确定这是否是最好的方法。另外,如果我将其作为字符串处理,我不知道如何将字符串解码回字节然后正确地返回字符串。
编辑:struct.unpack和打开文件的便捷方式是一种方法吗?
答案 0 :(得分:0)
我会使用mmap这样的东西。 mmap.mmap()返回一个可以索引的bytearray对象。
答案 1 :(得分:0)
这有效:
def swap_in_file_array(filename, a_ind, b_ind):
with open(filename, "r+b") as file:
data = file.read()
tuples = [data[i:i+4] for i in range(0, len(data), 4)]
a = []
b = []
for i in range(0, (len(tuples))):
if i == a_ind:
a = tuples[i]
# print(struct.unpack("i", tupples[i])[0]) # also used for displaying things if needed
elif i == b_ind:
b = tuples[i]
tuples[b_ind] = a
tuples[a_ind] = b
data = b''.join(tuples)
file.seek(0)
file.write(data)
file.close()
我确信其他一些代码魔术师可以让这个代码更有效率,但我对它很好。