1

次のようにバイナリファイルを読み取るコードを作成しました。

file=open('myfile.chn','rb')  
i=0  
for x in file:  
   i=i+1  
   print(x)  
file.close()

結果は次のとおりです(その一部):b'\x00\x00\x80?\x00\x00\x00\x005.xx\x00S\xd4\n'

このバイナリファイルのEOFを検出するにはどうすればよいですか?EOFを見つけたらprint()したいとしましょう。これを試しましたが、何も起こりませんでした。

if (x=='\n'):
print()

(更新しました)

@aix:例のように、ファイルの結果が数行であるとしましょう。各行の最後に「\ n」があり、各行の間にスペースを入れたいと思います。

b'\x00\x00\x80?\x00\x00\x00\x005.xx\x00S\xd4\n'

b'\x82\x93p\x05\xf6\x8c4S\x00\x00\xaf\x07j\n'

これどうやってするの?

4

2 に答える 2

6

EOFに到達すると、for x in file:ループは終了します。

with open('myfile.chn', 'rb') as f:
   i = 0
   for x in f:
      i += 1
      print(x)  
print('reached the EOF')

組み込みのをfileシャドウイングしないように、変数の名前を変更しました。

于 2012-05-14T10:13:08.727 に答える
0

NPEの答えは正しいですが、いくつかの追加の説明が必要だと思います。

次のようなものを使用してEOFを検出しようとしました

if (x=='\n'):
    ...

だからおそらくあなたは私が今日まで混乱していたのと同じように混乱しています。

EOFは文字またはバイトではありません。これはファイルの最後に存在する値ではなく、一部の(バイナリでさえ)ファイルの途中に存在する可能性のある値でもありません。Cの世界では、EOFにはある程度の値がありますが、その値は他のcharの値とは異なります(また、その型も「char」ではありません)。しかし、Pythonの世界では、EOFは「ファイルの終わりに到達した」ことを意味します。Pythonの「read」関数のヘルプには「...EOFまですべてのデータを読み取って返す」と書かれていますが、これは「EOFバイトが見つかるまで」という意味ではありません。「ファイルが終わるまで」という意味です。

「EOF」とは何か、および「EOF」ではないものの詳細な説明は、次のとおりです。http: //faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1048865140& id=1043284351

于 2016-08-11T10:23:20.533 に答える