我想从二进制文件中读取前188个字节,并检查第一个字符是否为0x47
。代码如下:
import os
fp=open("try.ts","rb")
for i in range(100):
buf=fp.read(188)
if buf[0]=="\x47":
print "OK"
fp.close()
但它给出了:
if buf[0]=="\x47":
IndexError: string index out of range
我的问题是:
read()
函数中返回值的类型是什么?答案 0 :(得分:9)
if buf[0]=="\x47":
IndexError: string index out of range
这意味着您的buf
为空。你在循环中把它覆盖了100次。该文件可能没有18800个字节。在文件末尾read
只返回一个空字符串。您的意思是将if
放入for
吗?如果是这样,请相应缩进。
答案 1 :(得分:3)
- read()函数中返回值的类型是什么?
醇>
您的意思是read
类型的方法file
。命令help(file.read)
给出:
read([size])
- >读取最多大小字节,以字符串形式返回。如果size参数为负数或省略,则读取直到达到EOF。 请注意,在非阻塞模式下,数据少于请求的数据 可能会被退回,即使没有给出尺寸参数。
- 如何获取字符串或数组中的第一个字符?
醇>
就像你一样,[0]
。
答案 2 :(得分:0)
使用序列类型的建议:
使用切片可能更有用,而不是使用确切的索引。即使对象为空,切片也始终存在。
buf[0:1] 在非空时返回与 buf[0] 相同的值,如果 buff 是空字符串则返回空字符串 '',而 buf[0] 返回错误(因为它是空的,第一个字符不存在)
一个字符串只有在为空时才为 False