はじめに
Jupyter notebookをDocker環境で使っており、テキストファイルを読み込もうとしたのですが、パスが見つからず困っていたのでまとめます。
親ディレクトリをたどって、特定のファイルを読み込む必要があったので、絶対パスを指定していたがパスが見つからず、親のディレクトリのファイルが読み込めない?そんなことあると思っていましたがそんなわけはありませんでした。
環境
- python3.8
- Docker
- jupyter notebook
問題
ディレクトリ構成がこのようになっている状態で、
/
├ experiments/
├ python
├ A.py
├ dict
├ file.txt
├ library/
A.py
からfile.txt
が存在していればファイルを読み込む処理をしようとしていた。
if os.path.exists('/experiments/dict/file.txt')
しかし、file.txt
があるはずなのに読み込んでくれなかった。
解決策
Jupyter画面でroot
に見えていた場所が実際には違っていて、絶対パスが正しく指定できていなかった。
私はここがroot
の位置だと思っていた。
しかし、pwd
コマンドでディレクトリを調べたところ
pwd
# 出力された結果
'/home/jovyan/data/experiments/python'
となっていた。/home/jovyan/data/
を指定していなかった。
docker-compose.ymlでボリュームを
volumes:
- ./experiments:/home/jovyan/data
としていたので、Jupyter上にはパスがなく勘違いしていたのが原因だった。
このようにファイルパスを指定しなおして読み込めるようになりました。
if os.path.exists('/home/jovyan/data/experiments/python')
最後に
読み込みでどうするんだろうとなることがしばしばあります。
調べてもこのJupyter問題は簡単に見つからなかったのでまとめました。
もしかしたら、絶対パスを指定するところで詰まる人は少ないのかも?