PythonのFileNotFoundErrorとは?意味・原因・直し方を初心者向けに解説

ながみえ

PythonでテキストファイルやCSVファイルを読み込もうとしたときに、FileNotFoundError というエラーが出ることがあります。

このエラーは、Pythonが指定されたファイルやフォルダを見つけられないときに発生します。

ファイル自体は用意しているつもりでも、ファイル名が少し違っていたり、ファイルを置いている場所とPythonが探している場所がずれていたりすると、エラーになることがあります。

特に初心者のうちは、「ファイルはあるのに、なぜ見つからないの?」と悩みやすいエラーです。この記事では、FileNotFoundError の意味、よくある原因、ファイルパスの確認方法、具体的な直し方を初心者向けに解説します。

Pythonでよく出るエラーを一覧で確認したい方は、「Pythonエラー一覧」も参考にしてください。

あわせて読みたい
Pythonエラー一覧|よくあるエラーの意味・原因・直し方
Pythonエラー一覧|よくあるエラーの意味・原因・直し方
あわせて読みたい
【完全無料】Python初心者向け完全ガイド
【完全無料】Python初心者向け完全ガイド

FileNotFoundErrorとは

FileNotFoundError は、Pythonが指定されたファイルやフォルダを見つけられないときに発生するエラーです。

たとえば、open() を使ってファイルを開こうとしたとき、指定した場所にそのファイルが存在しないと FileNotFoundError が表示されます。

よくあるエラーメッセージは、次のような形です。

FileNotFoundError: [Errno 2] No such file or directory: 'data.txt'

これは、「data.txt というファイルを探したけれど、指定された場所に見つからなかった」という意味です。

たとえば、次のように data.txt を読み込もうとしたとします。

with open("data.txt", "r", encoding="utf-8") as f:
    text = f.read()

print(text)

このコードでは、Pythonは data.txt というファイルを探します。しかし、実行している場所に data.txt がない場合、FileNotFoundError が発生します。

ここで大切なのは、「パソコンのどこかにファイルがあるか」ではなく、「Pythonが探している場所にファイルがあるか」という点です。

たとえば、デスクトップに data.txt があっても、Pythonを別のフォルダから実行している場合、Pythonはそのファイルを見つけられません。

FileNotFoundError が出たときは、ファイル名だけでなく、ファイルを置いている場所とPythonを実行している場所の関係も確認する必要があります。

FileNotFoundErrorが起きる主な原因

FileNotFoundError は、指定したファイルやフォルダが見つからないときに発生します。

ただし、原因は「ファイルが存在しない」だけとは限りません。実際には、ファイル名の間違い、保存場所の違い、Pythonを実行している場所の違いなど、いくつかのパターンがあります。

主な原因を整理すると、次のようになります。

原因内容確認すること
ファイル名の間違いコードで指定したファイル名と、実際のファイル名が違うつづり、大文字小文字、拡張子
ファイルの場所が違うPythonが探している場所にファイルがないファイルを置いているフォルダ
実行場所が違う想定しているフォルダとは別の場所からPythonを実行しているカレントディレクトリ
相対パスの指定ミス現在の実行場所から見たファイルの場所が間違っているフォルダ名や ../ の指定
絶対パスの指定ミスパソコン内の場所を示すフルパスが間違っているパス全体のつづり
保存先フォルダが存在しない書き込み時に、指定した保存先フォルダがないフォルダを先に作成しているか
拡張子の見落としdata.csv のつもりが、実際には別の名前になっている.txt.csv などの拡張子

特に多いのは、ファイル名は合っているように見えても、Pythonが探している場所と実際にファイルを置いている場所が違うケースです。

たとえば、data.txt というファイルがデスクトップにあっても、Pythonを別のフォルダから実行している場合、次のコードではファイルを見つけられないことがあります。

with open("data.txt", "r", encoding="utf-8") as f:
    text = f.read()

このコードでは、Pythonは「現在実行している場所」にある data.txt を探します。パソコン全体から data.txt を自動で探してくれるわけではありません。

そのため、FileNotFoundError が出たときは、まずエラーメッセージに表示されているファイル名を確認し、次にファイルの保存場所とPythonの実行場所を確認しましょう。

また、CSVファイルを読み込むときにも、拡張子の見落としでエラーになることがあります。たとえば、見た目は data.csv でも、実際には data.csv.txt という名前になっている場合があります。

ファイル名、拡張子、保存場所、実行場所を順番に確認していくと、原因を見つけやすくなります。

FileNotFoundErrorのエラー例と修正例

ここからは、FileNotFoundError が発生する具体的な例と、その直し方を見ていきます。

同じ FileNotFoundError でも、原因はファイル名の間違い、フォルダの指定ミス、実行場所の違いなどさまざまです。

コードとファイルの場所を見比べながら確認すると、どこを直せばよいか分かりやすくなります。

あわせて読みたい
Pythonのpathlibライブラリの使い方ガイド
Pythonのpathlibライブラリの使い方ガイド

ファイル名を間違えている場合

まずは、ファイル名を間違えているケースです。

たとえば、実際のファイル名は data.txt なのに、コードでは date.txt と書いているとします。

with open("date.txt", "r", encoding="utf-8") as f:
    text = f.read()

print(text)

このコードでは、Pythonは date.txt というファイルを探します。しかし、実際にあるファイルが data.txt の場合、date.txt は見つからないため、次のようなエラーになります。

FileNotFoundError: [Errno 2] No such file or directory: 'date.txt'

この場合は、コードに書いているファイル名を実際のファイル名に合わせます。

with open("data.txt", "r", encoding="utf-8") as f:
    text = f.read()

print(text)

ファイル名を確認するときは、つづりだけでなく、拡張子も確認しましょう。

たとえば、data.txtdata.csvdata はそれぞれ別の名前として扱われます。また、環境によっては大文字と小文字の違いも区別されるため、Data.txtdata.txt の違いにも注意が必要です。

ファイルの場所が違う場合

次に、ファイル自体は存在しているものの、Pythonが探している場所とは違うフォルダにあるケースです。

たとえば、次のようなフォルダ構成になっているとします。

project/
├─ main.py
└─ data/
   └─ sample.txt

このとき、main.py から sample.txt を読み込む場合、次のコードではエラーになることがあります。

with open("sample.txt", "r", encoding="utf-8") as f:
    text = f.read()

print(text)

sample.txtmain.py と同じ場所ではなく、data フォルダの中にあります。そのため、sample.txt だけを指定しても、Pythonはファイルを見つけられません。

この場合は、data フォルダの中にあることが分かるように、次のように指定します。

with open("data/sample.txt", "r", encoding="utf-8") as f:
    text = f.read()

print(text)

このように、ファイルが別のフォルダにある場合は、フォルダ名も含めて指定する必要があります。

「ファイルはあるのに見つからない」という場合は、ファイルがどのフォルダにあるのかを確認し、コードで指定している場所と一致しているか見てみましょう。

相対パスの指定を間違えている場合

FileNotFoundError で特につまずきやすいのが、相対パスの指定ミスです。

相対パスとは、現在の実行場所を基準にして、ファイルの場所を指定する書き方です。たとえば、data/sample.txt のように書いた場合、「現在の場所にある data フォルダの中の sample.txt」という意味になります。

よく使う相対パスの書き方を整理すると、次のようになります。

書き方意味
data.txt現在の場所にある data.txt
data/sample.txt現在の場所にある data フォルダ内の sample.txt
./data/sample.txt現在の場所から見た data/sample.txt
../data/sample.txt1つ上のフォルダにある data フォルダ内の sample.txt

たとえば、次のようなフォルダ構成を考えてみます。

project/
├─ main.py
└─ files/
   └─ data.txt

main.py から files フォルダ内の data.txt を読み込む場合は、次のように書きます。

with open("files/data.txt", "r", encoding="utf-8") as f:
    text = f.read()

print(text)

相対パスは便利ですが、「どこを基準にしているのか」がずれると FileNotFoundError になりやすいです。

コードを書いているファイルの場所ではなく、Pythonを実行している場所が基準になることもあるため、思った通りに読み込めない場合は、現在の実行場所を確認してみましょう。

絶対パスで指定する場合

相対パスでうまく指定できないときは、絶対パスでファイルを指定する方法もあります。

絶対パスとは、パソコン内のファイルの場所を最初から最後まで指定する書き方です。ファイルの場所をはっきり指定できるため、確認用として使うと原因を切り分けやすくなります。

Windowsでは、たとえば次のように書きます。

with open(r"C:\Users\user\Documents\data.txt", "r", encoding="utf-8") as f:
    text = f.read()

print(text)

Windowsのパスでは \ を使うことが多いですが、Pythonでは \ が特別な意味を持つことがあります。

そのため、文字列の前に r を付けて、r"C:\Users\user\Documents\data.txt" のように書くと分かりやすいです。

Macでは、たとえば次のように書きます。

with open("/Users/user/Documents/data.txt", "r", encoding="utf-8") as f:
    text = f.read()

print(text)

絶対パスを使えば、ファイルの場所を明確に指定できます。ただし、自分のパソコンでは動いても、別の人のパソコンでは同じ場所にファイルがあるとは限りません。

そのため、学習中の確認には便利ですが、実際のプログラムでは、プロジェクト内のフォルダ構成を整理して相対パスで指定するほうが扱いやすい場合もあります。

書き込み時に保存先フォルダが存在しない場合

FileNotFoundError は、ファイルを読み込むときだけでなく、ファイルを書き込むときにも発生することがあります。

たとえば、次のコードでは output フォルダの中に result.txt を作成しようとしています。

with open("output/result.txt", "w", encoding="utf-8") as f:
    f.write("結果を書き込みます")

一見すると、書き込みモードの "w" なので新しいファイルを作れそうに見えます。

しかし、output フォルダが存在しない場合、Pythonはその中に result.txt を作成できません。そのため、次のような FileNotFoundError が発生します。

FileNotFoundError: [Errno 2] No such file or directory: 'output/result.txt'

この場合は、先に保存先のフォルダを作成してから、ファイルを書き込みます。

from pathlib import Path

Path("output").mkdir(exist_ok=True)

with open("output/result.txt", "w", encoding="utf-8") as f:
    f.write("結果を書き込みます")

open()"w" は、指定したファイルがない場合に新しく作成できます。ただし、存在しないフォルダまでは自動で作ってくれません。

そのため、フォルダの中にファイルを書き込みたい場合は、保存先のフォルダが先に存在しているかを確認しましょう。

pathlibを使ってファイルの存在を確認する場合

ファイルが存在するかどうかを事前に確認したい場合は、pathlib を使うと便利です。

pathlib を使うと、ファイルパスを扱いやすくなり、ファイルがあるかどうかも簡単に確認できます。

from pathlib import Path

path = Path("data.txt")

if path.exists():
    print("ファイルがあります")
else:
    print("ファイルが見つかりません")

このコードでは、data.txt が存在する場合は「ファイルがあります」と表示されます。存在しない場合は「ファイルが見つかりません」と表示されます。

ファイルを開く前に存在確認をしておくと、FileNotFoundError の原因を調べやすくなります。

また、ファイルだけを確認したい場合は、is_file() を使うこともできます。

from pathlib import Path

path = Path("data.txt")

if path.is_file():
    print("ファイルとして存在します")
else:
    print("ファイルが見つからないか、フォルダの可能性があります")

exists() はファイルでもフォルダでも存在すれば True になります。一方、is_file() は、対象がファイルとして存在する場合に True になります。

ファイル読み込みのエラーを確認したいときは、Path("ファイル名").exists()Path("ファイル名").is_file() を使うと、原因を見つけやすくなります。

FileNotFoundErrorが出たときの確認ポイント

FileNotFoundError が出たときは、エラーメッセージに表示されているファイル名やパスを見ながら、順番に原因を確認していきましょう。

焦ってコード全体を直そうとすると、かえって原因が分かりにくくなることがあります。まずは、Pythonが「どのファイルを探しているのか」と「どの場所を基準に探しているのか」を確認することが大切です。

確認する順番は、次のように考えると分かりやすいです。

  1. エラーメッセージに表示されているファイル名を確認する
  2. ファイル名のつづりが正しいか確認する
  3. 拡張子が正しいか確認する
  4. ファイルを置いているフォルダを確認する
  5. Pythonを実行している場所を確認する
  6. 相対パスの基準が合っているか確認する
  7. 絶対パスで指定して読み込めるか試す
  8. 書き込みの場合は、保存先フォルダが存在するか確認する

たとえば、次のようなエラーメッセージが表示されたとします。

FileNotFoundError: [Errno 2] No such file or directory: 'data/sample.txt'

この場合、Pythonは data/sample.txt というファイルを探しています。

まずは、sample.txt というファイルが本当に存在するかを確認しましょう。次に、そのファイルが data フォルダの中にあるかを確認します。

ファイル名が正しくても、Pythonを実行している場所が想定と違うと、FileNotFoundError が発生することがあります。

現在の実行場所を確認したい場合は、次のように Path.cwd() を使います。

from pathlib import Path

print(Path.cwd())

このコードを実行すると、Pythonが現在どのフォルダを基準にしているかを確認できます。

たとえば、Path.cwd() の結果が project フォルダを指している場合、次のコードは project フォルダの中にある data/sample.txt を探します。

with open("data/sample.txt", "r", encoding="utf-8") as f:
    text = f.read()

もし data フォルダが別の場所にある場合は、相対パスを修正するか、絶対パスで指定して確認してみましょう。

また、書き込み時に FileNotFoundError が出ている場合は、保存先フォルダが存在するかを確認します。"w" モードでは新しいファイルを作成できますが、存在しないフォルダまでは自動で作成されません。

ファイル名、保存場所、実行場所を順番に確認していけば、FileNotFoundError の原因はかなり見つけやすくなります。

FileNotFoundErrorに関するよくある質問

ここでは、FileNotFoundError について初心者の方が疑問に感じやすいポイントをまとめます。

「ファイルはあるはずなのにエラーになる」「CSVファイルが読み込めない」など、実際によくある悩みを中心に確認していきましょう。

FileNotFoundError: No such file or directory とはどういう意味ですか?

FileNotFoundError: No such file or directory は、指定したファイルやフォルダが見つからないという意味です。

たとえば、次のようなエラーメッセージが表示されたとします。

FileNotFoundError: [Errno 2] No such file or directory: 'data.txt'

これは、Pythonが data.txt を探したものの、指定された場所に見つからなかったという意味です。

この場合は、まずファイル名のつづり、拡張子、ファイルを置いている場所を確認しましょう。特に、data.txtdata.csv のように拡張子が違うだけでも、Pythonでは別のファイルとして扱われます。

ファイルはあるのにFileNotFoundErrorが出るのはなぜですか?

ファイルがあるのに FileNotFoundError が出る場合は、Pythonが探している場所と、実際にファイルを置いている場所が違っている可能性があります。

たとえば、ファイルがデスクトップにあっても、Pythonを別のフォルダから実行している場合、open("data.txt") では見つからないことがあります。

現在の実行場所を確認したい場合は、次のコードを使います。

from pathlib import Path

print(Path.cwd())

表示された場所が、Pythonがファイルを探す基準になります。

open("data.txt") と書いた場合、Pythonはこの場所にある data.txt を探します。ファイルが別のフォルダにある場合は、フォルダ名も含めて指定しましょう。

相対パスと絶対パスの違いは何ですか?

相対パスは、現在の実行場所を基準にしてファイルの場所を指定する書き方です。

一方、絶対パスは、パソコン内のファイルの場所を最初から最後まで指定する書き方です。

違いを整理すると、次のようになります。

種類意味
相対パス現在の実行場所を基準に指定するdata/sample.txt
絶対パスパソコン内の場所を最初から指定するC:\Users\user\Documents\data.txt
絶対パスMacなどで使うパスの例/Users/user/Documents/data.txt

相対パスは短く書けるので便利ですが、実行場所が変わるとファイルを見つけられないことがあります。

絶対パスは場所をはっきり指定できますが、別のパソコンでは同じパスが使えないこともあります。学習中は、まず絶対パスで読み込めるか確認し、そのあと相対パスに直していくと原因を切り分けやすいです。

相対パスを上手に利用するにはPathlibライブラリを使用しましょう。

CSVファイルを読み込むときにFileNotFoundErrorが出るのはなぜですか?

CSVファイルを読み込むときに FileNotFoundError が出る場合は、ファイル名や保存場所がコードと一致していない可能性があります。

たとえば、次のようにCSVファイルを読み込もうとしたとします。

with open("data.csv", "r", encoding="utf-8") as f:
    text = f.read()

この場合、Pythonは現在の実行場所にある data.csv を探します。もしCSVファイルが data フォルダの中にあるなら、次のようにフォルダ名も指定する必要があります。

with open("data/data.csv", "r", encoding="utf-8") as f:
    text = f.read()

また、Windowsの設定によっては、拡張子が画面上で表示されていないことがあります。そのため、data.csv だと思っていたファイルが、実際には data.csv.txt になっている場合もあります。

CSVファイルでエラーが出たときは、ファイル名、拡張子、保存場所を順番に確認しましょう。

書き込みモードなのにFileNotFoundErrorが出るのはなぜですか?

open() の書き込みモード "w" は、指定したファイルが存在しない場合に新しく作成できます。

ただし、保存先のフォルダが存在しない場合は、FileNotFoundError が発生します。

たとえば、次のコードを見てみましょう。

with open("output/result.txt", "w", encoding="utf-8") as f:
    f.write("結果を書き込みます")

この場合、output フォルダが存在していれば、その中に result.txt を作成できます。

しかし、output フォルダが存在しない場合、Pythonはどこに result.txt を作ればよいか分からないため、エラーになります。

このような場合は、先にフォルダを作成してからファイルを書き込みます。

from pathlib import Path

Path("output").mkdir(exist_ok=True)

with open("output/result.txt", "w", encoding="utf-8") as f:
    f.write("結果を書き込みます")

ファイルは自動で作成できても、存在しないフォルダまでは自動で作成されない点に注意しましょう。

まとめ|FileNotFoundErrorはファイルの場所を順番に確認しよう

FileNotFoundError は、Pythonが指定したファイルやフォルダを見つけられないときに発生するエラーです。

このエラーが出たときは、まずファイル名のつづり、拡張子、ファイルを置いている場所を確認しましょう。特に、data.txtdata.csv のように拡張子が違う場合や、実際には data.csv.txt になっている場合には注意が必要です。

また、ファイルが存在していても、Pythonを実行している場所とファイルを置いている場所が違うと、FileNotFoundError が発生することがあります。相対パスを使う場合は、現在の実行場所を基準にしてファイルの場所を指定しましょう。

書き込み時にエラーが出る場合は、保存先のフォルダが存在しているかも確認してください。ファイルは新しく作成できても、存在しないフォルダまでは自動で作成されません。

Pythonでよく出るエラーをまとめて確認したい方は、「Pythonエラー一覧」も参考にしてください↓↓

あわせて読みたい
Pythonエラー一覧|よくあるエラーの意味・原因・直し方
Pythonエラー一覧|よくあるエラーの意味・原因・直し方
あわせて読みたい
【完全無料】Python初心者向け完全ガイド
【完全無料】Python初心者向け完全ガイド
記事URLをコピーしました