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() 関数の戻り値の型は何ですか?

readあなたは typeのメソッドを意味します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 に答える