read()函数的返回值是什么类型的?

时间:2013-04-16 12:43:32

标签: python byte

我想从二进制文件中读取前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. 如何获取字符串或数组中的第一个字符?

3 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:3)

  
      
  1. read()函数中返回值的类型是什么?
  2.   

您的意思是read类型的方法file。命令help(file.read)给出:

  

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

     

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


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

就像你一样,[0]

答案 2 :(得分:0)

使用序列类型的建议:
使用切片可能更有用,而不是使用确切的索引。即使对象为空,切片也始终存在。

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

一个字符串只有在为空时才为 False