gpt4 book ai didi

Python读取二进制文件并解码

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:45 27 4
gpt4 key购买 nike

我是 python 的新手,我需要解决这个简单的问题。已经有几个类似的问题,但我仍然无法解决。
我需要读取一个二进制文件,它由几个字节 block 组成。例如, header 由 6 个字节组成,我想提取这 6 个字节并转换 ins 二进制字符序列,例如 000100110 011001。

navatt_dir='C:/PROCESSING/navatt_read/'
navatt_filename='OSPS_FRMT_NAVATT____20130621T100954_00296_caseB.bin'
navatt_path=navatt_dir+navatt_filename

navatt_file=open(navatt_path, 'rb')
header=list(navatt_file.read(6))
print header

作为列表的结果,我有以下内容

%run C:/PROCESSING/navatt_read/navat_read.py
['\t', 'i', '\xc0', '\x00', '\x00', 't']

这不是我想要的。
我还想读取二进制文件中的特定值,知道位置和长度,而不读取所有文件。有可能吗
谢谢

最佳答案

字节数组

A bytearray是一个可变的字节序列(整数,其中 0 ≤ x ≤ 255)。您可以从字符串(如果它不是字节字符串,则必须提供编码)、字节大小整数的可迭代对象或具有缓冲区接口(interface)的对象构造字节数组。您当然也可以手动构建它。

一个使用字节串的例子:

string = b'DFH'
b = bytearray(string)

# Print it as a string
print b

# Prints the individual bytes, showing you that it's just a list of ints
print [i for i in b]

# Lets add one to the D
b[0] += 1

# And print the string again to see the result!
print b

结果:

DFH
[68, 70, 72]
EFH

如果您想要原始字节操作,这就是您想要的类型。如果您想要将 4 个字节读取为 32 位 int,可以使用 struct 模块和 unpack 方法,但我通常只是自己从字节数组中将它们移动到一起。

以二进制打印标题

您似乎想要的是获取您拥有的字符串,将其转换为字节数组,然后将它们打印为 base 2/binary 中的字符串。

所以这里有一个关于如何写出标题的简短示例(我从名为“转储”的文件中读取随机数据):

with open('dump', 'rb') as f:
header = f.read(6)

b = bytearray(header)

print ' '.join([bin(i)[2:].zfill(8) for i in b])

将其转换为字节数组后,我对每个字节调用 bin(),它会返回一个具有我们需要的二进制表示形式的字符串,格式为“0b1010”。我不想要“0b”,所以我用 [2:] 将它切掉。然后,我使用字符串方法 zfill,它允许我在字符串长度为 8 之前添加所需数量的 0(这是我们需要的位数),因为 bin 不会显示任何不需要的零。

如果您是该语言的新手,最后一行可能看起来很刻薄。它使用列表理解来制作我们要打印的所有二进制字符串的列表,然后将它们连接到最终的字符串中,元素之间有空格。

最后一行的一个不那么 pythonic/复杂的变体是:

result = []
for byte in b:
string = bin(i)[2:] # Make a binary string and slice the first two bytes
result.append(string.zfill(8)) # Append a 0-padded version to the results list

# Join the array to a space separated string and print it!
print ' '.join(result)

希望对您有所帮助!

关于Python读取二进制文件并解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23016425/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com