Python高效的方法来翻转文件中的字节?

2024-10-04 01:28:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件夹,里面装满了需要4次方字节翻转的非常大的文件。所以本质上,我需要将文件作为二进制文件来读取,调整位的序列,然后用调整后的位来写一个新的二进制文件。在

本质上,我要做的是读取一个十六进制字符串hexString,如下所示: “00112233AABBCCDD”

然后写一个如下所示的文件: “33221100DDCCBBAA”

(即,每两个字符是一个字节,我需要将字节翻转4次方)

一般来说,我对python和编码非常陌生,目前我完成这项任务的方式非常低效。我的代码当前如下所示:

import binascii

with open(myFile, 'rb') as f:
        content = f.read()

hexString = str(binascii.hexlify(content))

flippedBytes = ""
inc = 0

while inc < len(hexString):
    flippedBytes += file[inc + 6:inc + 8]
    flippedBytes += file[inc + 4:inc + 6]
    flippedBytes += file[inc + 2:inc + 4]
    flippedBytes += file[inc:inc + 2]
    inc += 8

..... write the flippedBytes to file, etc

我粘贴在上面的代码准确地完成了我的需要(注意,我的实际代码有几行额外的行:“十六进制字符串。替换()“删除不必要的十六进制字符-但我省略了这些字符,以使上面的内容更易于阅读)。我的终极问题是,用更大的文件运行我的代码需要非常长的时间。我需要翻转的一些文件大小几乎是2gb,而代码要花将近半天的时间才能完成一个文件。我有几十个文件需要运行这个,所以时间框架根本不实用。在

有没有更有效的方法来翻转文件中的十六进制值的4次幂?在

。。。。值得一提的是,有一个叫做WinHEX的工具可以手动完成这项工作,而且只需一分钟就可以翻转整个文件。。。。我只是希望用python实现自动化,这样我们就不必每次都手动使用WinHEX


Tags: 文件字符串代码字节时间二进制content字符
2条回答

这里有一个小的struct让你开始:

>>> import struct
>>> s = b'\x00\x11\x22\x33\xAA\xBB\xCC\xDD'
>>> a, b = struct.unpack('<II', s)
>>> s = struct.pack('>II', a, b)
>>> ''.join([format(x, '02x') for x in s])
'33221100ddccbbaa'

要对大输入全速执行此操作,请使用struct.iter_unpack

你想把4字节的整数从小端数转换成大端数,反之亦然。您可以使用^{}模块来完成此操作:

import struct

with open(myfile, 'rb') as infile, open(myoutput, 'wb') as of:
    while True:
        d = infile.read(4)
        if not d:
            break
        le = struct.unpack('<I', d)
        be = struct.pack('>I', *le)
        of.write(be)

相关问题 更多 >