Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python】バイナリファイルを読み書きモードで開く方法(w+b・r+bの使い分け)

バイナリ読み書きモードでファイルを開く基本

Pythonでバイナリファイルを読み取り・書き込みの両方のモードで開くには、open()関数の第2引数(mode)に 'w+b' を指定します。「w」は書き込み(write)、「b」はバイナリ(binary)を意味します。

f = open('my_file.mp3', 'w+b')
file_content = f.read()
f.write(b'Hello')
f.close()

このコードでは、my_file.mp3 をバイナリの読み書きモードで開き、ファイルの内容を変数 file_content に格納した後、ファイルに「Hello」というバイト列を書き込んでいます。最後に close() メソッドでファイルを閉じることで、変更が確定しリソースも解放されます。

'w+b' と 'r+b' の違いに注意

'w+b' で既存のファイルを開くと、オープン時点でファイルの中身が切り詰められ(空になります)。そのため、上記の例のように open 直後に read() を実行しても、実際には空のバイト列 b'' が返される点に注意が必要です。

既存の内容を保持したまま読み書きを行いたい場合は、'r+b'(読み書き両用・切り詰めなし)を使用します。テキストモードの 'r+' に相当するバイナリ版です。

# 既存の内容を壊さずに読み書きする場合
with open('my_file.mp3', 'r+b') as f:
    data = f.read()   # 現在の内容を読み取る
    f.seek(0)         # 書き込み位置を先頭に戻す
    f.write(b'Hello')

with文を使うとより安全

ファイル操作では、with 文(コンテキストマネージャ)を使うのが推奨されます。ブロックを抜けると自動的にファイルがクローズされるため、close() の呼び忘れによるリソースリークやデータ未保存のトラブルを防げます。

with open('my_file.mp3', 'w+b') as f:
    f.write(b'Hello')

まとめ

  • バイナリの読み書きモードで新規作成・上書きするなら 'w+b'(既存内容は消える)
  • 既存内容を残したまま読み書きするなら 'r+b'
  • ファイルは必ず close() するか、with 文で管理する
  1. PythonのaifcモジュールでAIFF・AIFCファイルを読み書きする方法

    Python標準ライブラリのaifcモジュールは、AIFF(Audio Interchange File Format)およびAIFF-Cファイルの読み書きをサポートするさまざまな関数を提供しています。AIFF形式はデジタル音声サンプルをファイルに保存するためのフォーマットで、その後継であるAIFF-Cでは音声データの圧縮が可能になっています。なお、aifcモジュールはPython 3.11で非推奨となり、Python 3.13で削除されました。古いバージョンを使用している場合や、互換性のために既存コードを理解する必要がある場合に役立つ知識です。オーディオファイルのパラメータオーディオファイル

  2. PythonのopenpyxlモジュールでExcelファイルを読み書きする方法【初心者向け完全ガイド】

    Pythonには、Excelファイル(.xlsx)を操作するためのopenpyxlという便利なモジュールが用意されています。このモジュールを使えば、Excelファイルの新規作成、データの書き込み・読み取り、シートの追加や管理など、さまざまな操作をプログラムから自動的に行うことができます。 本記事では、openpyxlの基本的な使い方を、実際に動作するサンプルコードとともに順番に解説していきます。 openpyxlのインストール方法 openpyxlは標準ライブラリではないため、まずインストールが必要です。コマンドプロンプト(またはターミナル)で以下のコマンドを実行してください。 pip ins