IO.UnsupportedOperation: Python での書き込み不可エラー

Manav Narula 2023年6月21日
  1. Python の io.UnsupportedOperation: not writable エラーを修正
  2. まとめ
IO.UnsupportedOperation: Python での書き込み不可エラー

Python は、ファイルからのデータの読み取りと書き込みにおいて非常に効率的です。 ファイル処理に役立つさまざまな機能があります。

ファイル処理の基本には、open() 関数を使用してファイルを開き、ファイル モードに基づいてデータを読み書きすることが含まれます。

open() は、指定されたファイルを開き、ファイルの読み取りおよび書き込み操作を実行するために使用できるファイル オブジェクトを作成します。

ファイルは、さまざまなタイプのモードで開くことができます。 デフォルトでは、ファイルを読み取りモードで開きます。

このチュートリアルでは、Python の io.UnsupportedOperation: not writable エラーとその修正方法について説明します。

Python の io.UnsupportedOperation: not writable エラーを修正

このエラーは、読み取りモードで開かれたファイルに対して write 操作を実行しようとすると発生します。 読み取りモードで開いたファイルは、内容を読み取ることしかできません。

例えば:

with open("sample.txt", "r") as f:
    f.write("Text")

出力:

io.UnsupportedOperation: not writable

上記の例では、ファイルを r モード (読み取り) で開き、write() 関数を使用してこのファイルにデータを書き込もうとしたため、エラーが発生したことに注意してください。

これを解決するには、この操作をサポートするモードでファイルを開くことを忘れないでください。 書き込み (w) または追加 (a) モードは、ファイルにデータを書き込むために使用されます。

w モードでファイルを開くと、以前の内容は切り捨てられます。 a モードはファイルの末尾にコンテンツを追加し、以前のデータを保持します。

例えば:

with open("sample.txt", "w") as f:
    f.write("Text")

上記の例では、エラーを正常に回避し、ファイルにデータを書き込むことができます。

ファイルからのデータの読み取りと書き込みを同時に行いたい場合は、r+b モードを使用できます。 ファイルがこのモードで開かれている場合、バイナリモードで読み取りおよび書き込み操作を実行できます。

例えば:

with open("sample.txt", "r+b") as f:
    f.write(bytes("Text", "utf-8"))

ファイルはバイナリモードで開かれるため、データをバイトとして書き込むことに注意してください。 上記の例では、テキストは utf-8 エンコーディングでバイトとしてエンコードされます。

または、writable() 関数を使用して、ファイル ハンドルを使用して書き込み操作を実行できるかどうかを確認することもできます。 True または False を返します。

以下のコードを参照してください。

with open("sample.txt", "r") as f:
    print(f.writable())

with open("sample.txt", "a") as f:
    print(f.writable())

出力:

False
True

上記の例は、ファイルが r モードで開かれると writable 関数が False を返し、ファイルが a モードで開かれると True を返すことを示しています。

まとめ

最後に、io.UnsupportedOperation: not writable エラーの背後にある原因とその修正方法について説明しました。 間違ったモードでファイルを開くとこれがどのように発生するか、および書き込み操作をサポートするファイル モードについて説明しました。

また、ファイルオブジェクトが書き込み操作を実行できるかどうかを確認するために使用できる writable 関数の使用方法も示しました。

著者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

関連記事 - Python Error