[解決済み] バイナリファイルの読み込みと各バイトのループ処理
2022-03-24 07:07:13
質問
Pythonで、バイナリファイルを読み込んで、そのファイルの各バイトをループさせるにはどうしたらいいですか?
どのように解決するのですか?
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()
Python 2.5-2.7
with open("myfile", "rb") as f:
byte = f.read(1)
while byte != "":
# Do stuff with byte.
byte = f.read(1)
with文はPythonの2.5以下のバージョンでは使用できないことに注意してください。v 2.5で使用するには、インポートする必要があります。
from __future__ import with_statement
2.6では必要ありません。
パイソン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 が言うように、not equal をスキップして
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)
パイソン3.8
これからは、:=演算子のおかげで、上記のコードを短く書くことができます。
with open("myfile", "rb") as f:
while (byte := f.read(1)):
# Do stuff with byte.
関連
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] バイトを文字列に変換する
-
[解決済み] Git リポジトリで削除されたファイルを検索して復元する方法
-
[解決済み] Pythonでファイルやフォルダを削除する方法は?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】forループを使った辞書の反復処理
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
Python入門 openを使ったファイルの読み書きの方法
-
Python LeNetネットワークの説明とpytorchでの実装
-
Python 入出力と高次代入の基礎知識
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み] Pythonでバイナリファイルを読み込む