panco’s blog

興味が沸いたことを書く

【Python】相対パスを設定して FileNotFoundError が出た時の対処

Python 初心者です。時々起きてしまうエラーで毎回はまるため、対処を残しておく。

実行環境

ディレクトリ構造

sample-project
└─sample
    │  sample.py (実行するスクリプト)
    │
    └─data
        └─txt
                hoge.txt (参照するファイル)

サンプルコード(FileNotFoundError)

sample.py(FileNotFoundError)

# hoge.txt を読み込んで、テキストの本文を表示するサンプルコード

# hoge.txt の場所を相対パスで設定
source = 'data/txt/hoge.txt'
# hoge.txt を読み込む
f = open(source, 'r', encoding='utf-8')
data = f.read()
f.close()
# hoge.txt の本文を表示
print(data)

サンプルコード(FileNotFoundError)実行結果

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

FileNotFoundError が出た時に確認すること

1.パスを誤記していないか確認する

いわゆるケアレミスしていないか。 ※元ネタを知らないと伝わらない。ケアレミス。。

2.1 が OK の場合、実行時のカレントディレクトリを取得&確認する

sample.py(カレントディレクトリ取得版)

# hoge.txt を読み込んで、テキストの本文を表示するサンプルコード

# カレントディレクトリを取得・表示する
import os
print(os.getcwd())

# hoge.txt の場所を相対パスで設定
source = 'data/txt/hoge.txt'
# hoge.txt を読み込む
f = open(source, 'r', encoding='utf-8')
data = f.read()
f.close()
# hoge.txt の本文を表示
print(data)

sample.py(カレントディレクトリ取得版)実行結果
赤のアンダーラインが実行時のカレントディレクトリ。ここを起点とした相対パスを設定する必要がある。

実行結果

サンプルコード(修正版)

相対パスを正しい値に修正。('data/txt/hoge.txt' → 'sample/data/txt/hoge.txt')
sample.py(修正版)

# hoge.txt を読み込んで、テキストの本文を表示するサンプルコード

# hoge.txt の場所を相対パスで設定
source = 'sample/data/txt/hoge.txt'
# hoge.txt を読み込む
f = open(source, 'r', encoding='utf-8')
data = f.read()
f.close()
# hoge.txt の本文を表示
print(data)

サンプルコード(修正版)実行結果

hoge.txt の本文が正常に表示された。

Hello hoge!