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()