バイナリファイルを読み取り、各バイトをループする [重複] 質問する

バイナリファイルを読み取り、各バイトをループする [重複] 質問する

Python でバイナリ ファイルを読み込み、そのファイルの各バイトをループするにはどうすればよいでしょうか?

ベストアンサー1

Python >= 3.8

おかげセイウチ演算子 ( :=)解決策は非常に簡単です。ファイルからオブジェクトを読み取りbytes、変数に割り当てます。byte

with open("myfile", "rb") as f:
    while (byte := f.read(1)):
        # Do stuff with byte.

Python >= 3

古いバージョンの Python 3 では、もう少し冗長な方法を使用する必要があります。

with open("myfile", "rb") as f:
    byte = f.read(1)
    while byte != b"":
        # Do stuff with byte.
        byte = f.read(1)

または、benhoyt が言うように、等しくない部分をスキップして、b""false と評価されるという事実を利用します。これにより、コードを変更せずに 2.6 と 3.x の間で互換性を持たせることができます。また、バイト モードからテキスト モードに切り替えたり、その逆に切り替えたりする場合にも、条件を変更する必要がなくなります。

with open("myfile", "rb") as f:
    byte = f.read(1)
    while byte:
        # Do stuff with byte.
        byte = f.read(1)

Python >= 2.5

Python 2 では少し異なります。ここではバイト オブジェクトではなく、生の文字が取得されます。

with open("myfile", "rb") as f:
    byte = f.read(1)
    while byte != "":
        # Do stuff with byte.
        byte = f.read(1)

with ステートメントは Python 2.5 より前のバージョンでは利用できないことに注意してください。バージョン 2.5 で使用するには、次のようにインポートする必要があります。

from __future__ import with_statement

2.6 ではこれは必要ありません。

Python 2.4 以前

f = open("myfile", "rb")
try:
    byte = f.read(1)
    while byte != "":
        # Do stuff with byte.
        byte = f.read(1)
finally:
    f.close()

おすすめ記事