さまざまなファイルモードの操作
メニューを表示するにはスワイプしてください
Pythonでのさまざまなファイルモードの使い方を学習。ファイルの読み込み、書き込み、追記を実践例とともに解説。
Pythonのファイルモードには、読み込み用の 'r'、書き込み用(新規作成/上書き)の 'w'、追記用(存在しない場合は作成)の 'a'、バイナリモードの 'b'、読み書き両用の '+' などがある。適切なモードを選択することでデータ損失を防止。
読み込みモード
読み込みモード('r')は、既存のファイルを読み込み専用で開くモード。書き込みや変更はできない。このモードでファイルが存在しない場合、Pythonは FileNotFoundError を発生させる。ファイル内容を変更せずにデータを参照・取得したい場合に使用。
123456with open("sample.txt", "w") as f: f.write("This is a sample file.\nSecond line.") with open("sample.txt", "r") as f: content = f.read() print(content)
このコードは、サンプル内容を持つテキストファイルを作成し、その後ファイルから内容を読み取って表示します。
書き込みモード
Pythonの書き込みモード(w)は、ファイルを書き込み用に開きます。wモードは、新しいファイルを作成する場合や、既存のファイルの内容を消去して新しい内容に置き換える場合に使用します。注意点として、wモードでファイルを開くと、既存のデータはすべて失われます。
1234567891011with open("write_example.txt", "w") as file: file.write("This file was created or overwritten using write mode.\n") with open("write_example.txt", "r") as file: print(file.read()) with open("write_example.txt", "w") as file: file.write("Every time you run this code, the contents are replaced.\n") with open("write_example.txt", "r") as file: print(file.read())
このコードは、最初の書き込み後と上書き後のファイル内容を表示し、以前のデータが消去されて新しい内容に置き換えられる様子を示しています。
追記モード
ファイルモード 'a' で指定される追記モードは、ファイルの末尾に新しい内容を追加して書き込むためにファイルを開きます。ファイルが存在しない場合は自動的に作成されます。このモードは、既存データを保持しつつ、末尾に情報を追加したい場合(ログの新規エントリや記録の更新など)に有用です。書き込みモード('w')とは異なり、追記モードでは既存の内容が削除または上書きされることはありません。
123456789with open("append_example.txt", "w") as f: f.write("Original line\n") with open("append_example.txt", "a") as f: f.write("Appended line\n") with open("append_example.txt", "r") as f: result = f.read() print(result.strip())
このコードは、最初に初期内容を持つファイルを作成します。その後、同じファイルを追記モード('a')で開き、末尾に新しい行を追加します。最後に、ファイル全体の内容を読み込んで表示し、新しいデータが元の内容を削除または変更せずに末尾に追加されたことを確認できます。
バイナリモード
バイナリモードは、ファイルをテキストではなくバイト単位で読み書きする必要がある場合に使用します。これは、画像、音声ファイル、実行ファイルなどの非テキストファイルを扱う際に不可欠です。'b'(バイナリ読み込み)や'rb'(バイナリ書き込み)のように、他のファイルモードと'wb'を組み合わせて使用します。
ファイルをバイナリモードで開くと、データは生のバイトとしてそのまま読み書きされます。エンコーディングやデコーディングは行われないため、データはbytesオブジェクトとして扱う必要があります。これにより、標準テキストエンコーディングを使用しないファイルを読み書きする際に発生する問題を防ぐことができます。
12345678byte_data = b"\x48\x65\x6c\x6c\x6f, binary world!" # This is 'Hello, binary world!' in bytes with open("sample_binary.bin", "wb") as f: f.write(byte_data) with open("sample_binary.bin", "rb") as f: read_bytes = f.read() print(read_bytes)
このコードは、メッセージ 'Hello, binary world!' を含むバイト文字列を sample_binary.bin というファイルにバイナリ書き込みモード('wb')で書き込みます。モードの b は、ファイルがテキストではなくバイナリデータとして扱われることを示します。書き込み後、ファイルは再びバイナリ読み込みモード('rb')で開かれ、生のバイトデータが読み込まれます。その後、コードはバイトオブジェクトの人間が読める表現を出力します。
読み書きモード
r+ ファイルモードは、既存のファイルに対して読み込みと書き込みの両方を可能にします。r+ でファイルを開くと、その内容を読み取ったり、修正したり、任意の位置に新しいデータを追加したりできます。ただし、ファイルはすでに存在している必要があり、指定した名前のファイルが見つからない場合、r+ では新しいファイルは作成されません。
このモードは、既存の内容を失うことなくファイル内のデータを更新または処理する必要がある場合に便利です。書き込み操作は現在のファイルポインタ位置から開始されるため、seek() などのファイルポインタメソッドを使って、変更が発生する正確な位置を制御できます。
1234567891011121314151617# Writing initial content to the file with open("data.txt", "w") as f: f.write("First line\nSecond line\n") # Opening the file in r+ mode for reading and updating with open("data.txt", "r+") as f: # Reading and printing the original content original_content = f.read() print("Before update:\n" + original_content.strip()) # Moving file pointer to the beginning f.seek(0) # Overwriting the first line f.write("Updated first line\n") # Moving pointer to the start to read the updated content f.seek(0) updated_content = f.read() print("After update:\n" + updated_content.strip())
この出力例は、ファイルの1行目が正常に上書きされたことを示しています。読み書きモード('r+')を使用することで、ファイル全体を消去したり書き換えたりせずに、特定の部分(例えば1行目のみ)を更新できます。これは、ファイル内の他の内容を保持しつつ既存データを編集したい場合に有用です。
'r+'モードを使うと、新しく書き込んだデータは現在のファイル位置から既存の内容を上書きします。新しい内容が元の内容より短い場合、古い行の残り部分がファイル内に残ります。つまり、書き換え後も以前の内容の一部が残る場合があります。ファイルは自動的に切り詰められないため、新しいデータの末尾以降に元の内容の余分な文字が残ることに注意してください。
1. 既存のテキストファイルを変更せずに読み込みたい場合、どのファイルモードを使用すべきですか?
2. 既存のテキストファイルの内容を削除せずに、新しいデータを末尾に追加するには、どのファイルモードを使用すべきですか?
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください