gpt4 book ai didi

python - 如何在 Python 中将二进制文件读取为十六进制?

转载 作者:太空狗 更新时间:2023-10-30 00:27:44 24 4
gpt4 key购买 nike

我想读取一个以十六进制格式编码的数据文件:

01ff0aa121221aff110120...etc

文件包含 >100.000 个这样的字节,有些超过 1.000.000(它们来自 DNA 测序)

我尝试了以下代码(以及其他类似代码):

filele=1234563
f=open('data.geno','r')
c=[]
for i in range(filele):
a=f.read(1)
b=a.encode("hex")
c.append(b)
f.close()

这给每个字节单独的“aa”“01”“f1”等,这对我来说是完美的!

直到(在本例中)恰好是“1a”的第 905 字节为止,它都可以正常工作。我还尝试了 ord() 函数,该函数也停止在同一字节。

可能有一个简单的解决方案?

最佳答案

简单的解决方案是 binascii :

import binascii

# Open in binary mode (so you don't read two byte line endings on Windows as one byte)
# and use with statement (always do this to avoid leaked file descriptors, unflushed files)
with open('data.geno', 'rb') as f:
# Slurp the whole file and efficiently convert it to hex all at once
hexdata = binascii.hexlify(f.read())

这只会为您提供十六进制值的 str,但它比您尝试做的要快得多。如果你真的想要一堆长度为每个字节的十六进制字符串,你可以很容易地转换结果:

hexlist = map(''.join, zip(hexdata[::2], hexdata[1::2]))

这将生成与每个字节的十六进制编码对应的 len 2 str 列表。为避免 hexdata 的临时副本,您可以使用一种类似但不太直观的方法,通过使用 zip 两次使用相同的迭代器来避免切片:

hexlist = map(''.join, zip(*[iter(hexdata)]*2))

更新:

对于 Python 3.5 及更高版本的用户,bytes objects spawned a .hex() method ,因此不需要模块将原始二进制数据转换为 ASCII 十六进制。顶部的代码块可以简化为:

with open('data.geno', 'rb') as f:
hexdata = f.read().hex()

关于python - 如何在 Python 中将二进制文件读取为十六进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34687516/

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