如何用python交换文件中的某些字节?

时间:2017-03-06 14:41:47

标签: python file-io byte

我有一个字节文件,由整数组成,每个占用4个字节的空间。我也有我的python代码中的函数,它应该在给定索引的情况下切换文件中的两个元素。

索引0是第一个4字节整数,索引1是第二批4个字节,依此类推。

我如何在我的代码中实现这一点?

我坚持两者 - 解码然后只回写更改。我想我可以使用fileinput将这条单行作为字符串处理,但我不确定这是否是最好的方法。另外,如果我将其作为字符串处理,我不知道如何将字符串解码回字节然后正确地返回字符串。

编辑:struct.unpack和打开文件的便捷方式是一种方法吗?

2 个答案:

答案 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()

我确信其他一些代码魔术师可以让这个代码更有效率,但我对它很好。