Pythonを使ってテキストファイルを読み込む際に発生しやすいエラーとその対処法について解説します。
基本: テキストファイルの読み込み
Pythonでテキストファイルを読み込むには、open()関数とwith文を組み合わせるのが一般的です。
with open("sample.txt", "r", encoding="utf-8") as f: content = f.read() print(content)
ファイルのエンコードの指定に指定について: encoding="..."
エンコーディングが不明な場合は、encoding引数を省略すると、Pythonがシステムのデフォルトエンコーディングを使ってファイルを開こうとします。しかし、異なる環境で実行した際に問題が発生する可能性があるため、エンコーディングは明示的に指定することを強く推奨します。正しいエンコーディングを指定しないと、UnicodeDecodeErrorが発生する可能性があります。
- 日本語のテキストファイルを扱う場合、よく使われるエンコーディングは以下の通りです。
with文の利点: with文を使うと、ファイル操作が終わった後に自動的にファイルを閉じてくれます。これにより、close()メソッドの呼び出し忘れを防ぎ、リソースリーク(ファイルが開いたままになる問題)を避けることができます。
PythonのOpen関数の他の仕様については、こちらの記事も参考にしてください。
よくあるエラーとその原因、対処法
ファイル読み込み時に発生しやすいエラーとその原因、そして具体的な対処法を以下にまとめます。
| エラー | 原因 | 対処法 |
|---|---|---|
FileNotFoundError |
指定したファイルが存在しない、またはパスが間違っている。 | ファイルが存在する場所(ディレクトリ)とファイル名が正しいか確認する。フルパスで指定するのも有効。 |
UnicodeDecodeError |
指定した文字エンコーディングと実際のファイルのエンコーディングが一致していない。 | テキストエディタなどでファイルの実際のエンコーディングを確認し、open()関数のencoding引数に正しい値を指定する(例:encoding="utf-8", encoding="shift_jis")。またはencoding引数を省略しPythonにエンコーディングを推測させる。 |
PermissionError |
ファイルを開くための権限(パーミッション)がない。 | ファイルのプロパティを確認し、読み取り権限があるか確認する。必要に応じて権限を変更する。または、管理者権限でプログラムを実行する。 |
IsADirectoryError |
ファイルではなく、ディレクトリ(フォルダ)を指定してopen()関数を呼び出した。 |
open()関数にはファイル名を指定する。ディレクトリを指定していないか確認する。 |
OSError |
上記以外のOSレベルのエラー。ディスクがいっぱいの場合や、ファイル名に使えない文字が含まれている場合など。 | エラーメッセージを確認し、原因に応じた対処を行う。ディスク容量の確認、ファイル名の修正など。 |
TypeError |
open()関数に不適切な型の引数が渡された場合 |
ファイルパスは文字列で指定します。整数やリストを直接渡していないか確認しましょう |
例外処理のサンプルコード
エラーが発生する可能性のある処理は、try-exceptブロックで囲み例外処理を実施します。下記のコードを参考にしてください。
try: with open("sample.txt", "r", encoding="utf-8") as f: content = f.read() print(content) except FileNotFoundError: print("ファイルが見つかりませんでした。ファイル名と場所を確認してください。") except UnicodeDecodeError: print("文字エンコーディングエラーが発生しました。ファイルのエンコーディングを確認してください。") except OSError as e: print(f"OSエラーが発生しました: {e}") except Exception as e: print(f"予期せぬエラーが発生しました: {e}")
まとめ
この記事では、Pythonでテキストファイルを読み込む基本的な方法、特にopen()関数のmode引数とencoding引数、そしてファイル読み込み時に発生しやすいエラーとその対処法について詳しく解説しました。読み込みで問題が起こりやすいのがファイルのエンコードの問題で、encoding引数で文字エンコーディングを正しく指定することが重要です。また、再利用されるコード、他から参照されるコードでは適切エラー処理を行い、安全なプログラムを作成することが求められます。
[PR]
退屈なことはPythonにやらせよう 第2版 ノンプログラマーにもできる自動化処理プログラミング [ AI Sweigart ]