0

我想从二进制文件中读取前 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

我的问题是:

  1. 函数中返回值的类型是什么read()
  2. 如何获取字符串或数组中的第一个字符?
4

3 回答 3

9
if buf[0]=="\x47":
IndexError: string index out of range

这意味着你buf是空的。您在循环中覆盖了它 100 次。该文件中可能没有 18800 字节。在文件末尾read只返回一个空字符串。你的意思是把你的if里面for?如果是这样,请相应地缩进。

于 2013-04-16T12:47:10.203 回答
3
  1. read() 函数中返回值的类型是什么?

你的意思是readtype的方法file。该命令help(file.read)给出:

read([size])-> 最多读取 size 个字节,以字符串形式返回。

如果 size 参数为负数或省略,则读取直到到达 EOF。请注意,在非阻塞模式下,即使没有给出大小参数,返回的数据也可能少于请求的数据。


  1. 如何获取字符串或数组中的第一个字符?

就像你做的那样,[0]

于 2013-04-16T12:47:43.320 回答
0

使用序列类型时的建议:与其
使用精确索引,不如使用切片更有用。即使对象为空,切片也始终存在。

buf[0:1] 非空时返回与 buf[0] 相同,如果 buff 为空字符串则返回空字符串 '',而 buf[0] 则返回错误(因为为空,所以第一个字符不存在)

并且字符串只有在为空时才为 False

于 2021-03-01T19:55:44.977 回答