Python 提取二进制头中的前20个字节

Python 提取二进制头中的前20个字节,python,Python,我正试图学习如何在Python中实现这一点,用下面的psuedo代码玩得很狂妄,但却找不到任何值得一分钱的东西 with open(file, "rb") as f: byte = f.read(20) # read the first 20 bytes? while byte != "": print f.read(1) 最后,我希望得到一个能够实现以下功能的代码: 但我当然对学习如何到达那个里很感兴趣,所以任何指点都会很受欢迎 非常接近 with open(

我正试图学习如何在Python中实现这一点,用下面的psuedo代码玩得很狂妄,但却找不到任何值得一分钱的东西

with open(file, "rb") as f:
    byte = f.read(20) # read the first 20 bytes?
    while byte != "":
        print f.read(1)
最后,我希望得到一个能够实现以下功能的代码:

但我当然对学习如何到达那个里很感兴趣,所以任何指点都会很受欢迎

非常接近

with open(file, "rb") as f:
    byte = f.read(20) # read the first 20 bytes? *Yes*
将确实读取前20个字节

但是

将(正如您所期望的)读取一个字节并打印它,但它将永远打印它,因为您的循环条件将始终为真

这里不清楚您想做什么,但如果您只想打印一个字节,删除while循环即可:

print f.read(1)
如果要打印单个字节直到文件结束,请考虑:

while True:
   byte = f.read(1)
   if byte == "": break
   print byte
或者,如果要在读入
字节的前20个字节中查找特定字节,可以使用iterable索引:

with open(file, "rb") as f:
    byte = f.read(20)

print byte[0]  # First byte of the 20 bytes / first byte of the file
print byte[1]  # Second byte of the 20 bytes / ...
# ...
或者正如Lucas在评论中所建议的,您可以迭代字符串
字节
(顺便说一句,这是一个字符串,从
read()
返回):

您可能还对字节的位置及其十六进制值感兴趣(对于0x0a、0x0d等值):

非常接近

with open(file, "rb") as f:
    byte = f.read(20) # read the first 20 bytes? *Yes*
将确实读取前20个字节

但是

将(正如您所期望的)读取一个字节并打印它,但它将永远打印它,因为您的循环条件将始终为真

这里不清楚您想做什么,但如果您只想打印一个字节,删除while循环即可:

print f.read(1)
如果要打印单个字节直到文件结束,请考虑:

while True:
   byte = f.read(1)
   if byte == "": break
   print byte
或者,如果要在读入
字节的前20个字节中查找特定字节,可以使用iterable索引:

with open(file, "rb") as f:
    byte = f.read(20)

print byte[0]  # First byte of the 20 bytes / first byte of the file
print byte[1]  # Second byte of the 20 bytes / ...
# ...
或者正如Lucas在评论中所建议的,您可以迭代字符串
字节
(顺便说一句,这是一个字符串,从
read()
返回):

您可能还对字节的位置及其十六进制值感兴趣(对于0x0a、0x0d等值):


你能说得更具体些吗?
bytes=f.read(20)
应该可以用了。如果没有,您需要告诉我们您期望的结果。@JoelKalberg您应该在文本中总结您的问题,仅使用链接作为支持。一旦读者必须跳转你的链接,你就失去了他。虽然这可能是一种让你对文件格式感到满意的可行方法,但你应该查看模块来实际解析它。你能更具体一点吗?
bytes=f.read(20)
应该可以工作。如果没有,您需要告诉我们您期望的结果。@JoelKalberg您应该在文本中总结您的问题,仅使用链接作为支持。一旦读者必须跳转你的链接,你就失去了他。虽然这可能是一种让你对文件格式沾沾自喜的可行方法,但你应该查看模块以实际解析它。更重要的是,在读取前20个字节后,
f.read(1)
将读取字节21,22等。他应该反复阅读
字节
而不是从
f
读更多。@Lucas,我刚才的想法和你一样,我更新了我的答案(或者…)I@jedwards,谢谢你的回复。信息量最大:)我会花一段时间来研究这个问题,看看我最终会得到什么。我为一次糟糕的行动道歉,当时我有点匆忙。更重要的是,在阅读了前20个字节后,
f.read(1)
将读取字节21、22等。他应该迭代
bytes
,而不是从
f
再读取一些。@Lucas,我刚才和你有同样的想法,我更新了我的答案(或者…)I@jedwards,谢谢你的回复。信息量最大:)我会花一段时间来研究这个问题,看看我最终会得到什么。我为一次糟糕的行动道歉,当时我有点匆忙。J