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

时间:2014-05-13 14:33:48

标签: python

我正在尝试学习如何在Python中执行此操作,使用psuedo代码进行游戏,但不能提出任何值得一分钱的东西

with open(file, "rb") as f:
    byte = f.read(20) # read the first 20 bytes?
    while byte != "":
        print f.read(1)

最后,我想得到一个能够满足以下要求的代码:https://stackoverflow.com/a/2538034/2080223

但是我当然有兴趣学习如何到达那里,所以任何指针都会受到很大的谴责!

1 个答案:

答案 0 :(得分:5)

非常接近

with open(file, "rb") as f:
    byte = f.read(20) # read the first 20 bytes? *Yes*

确实会读取前20个字节。

但是

    while byte != "":
        print f.read(1) # print a single byte?

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

目前还不清楚你想要做什么,但是如果你只想打印一个字节,那么删除while循环就可以了:

print f.read(1)

如果要打印单个字节直到文件结尾,请考虑:

while True:
   byte = f.read(1)
   if byte == "": break
   print byte

或者,如果您在前20个内容中查找特定字节,则可以使用可迭代索引:

byte

或者正如Lucas在评论中建议的那样,你可以遍历字符串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 / ... # ... (顺便说一句,它是从byte返回的字符串):

read()

您可能也对字节的位置感兴趣,并且它是十六进制值(对于像0x0a,0x0d等的值):

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

for b in byte:
    print b