ファイルが存在する場所を指定しているつもりですが,どうしても「FileNotFoundError」が発生してしまいます。
原因がどうしても分からず詰まっているので,どなたかお助けください。。。
※前回質問させていただいた「(Python) 別のディレクトリにあるファイルをimportできない」と似た系統の質問となり大変恐縮です...。
パスの指定の仕方で誤りがあるのか,それともそのほかの原因が考えられるのかなどアドバイスいただければ幸いです....!
##ディレクトリ構造
projectX ★カレントディレクトリ |_apps |_configurator.py ★実行ファイル |_users |_demo |_config.yml ★欲しいファイル
##実行ファイル
python
1apps/configurator.py 2 3import yaml 4import os, sys 5class Configurator: 6 @classmethod 7 def user_config(cls, user_name): 8 os.chdir(os.path.dirname(os.path.abspath(__file__))) 9 sys.path.append('..') 10 # print(os.getcwd()) 11 config_path = f'users/{user_name}/config.yml' 12 with open(config_path, "r", encoding='utf-8') as yaml_file: 13 config = yaml.load(yaml_file, Loader=yaml.FullLoader) 14 return config 15 16 17if __name__ == "__main__": 18 config = Configurator.user_config("demo") 19 print(config)
##実行結果
cmd
1~\projectX 2$ python .\apps\configurator.py 3 4Traceback (most recent call last): 5 File "C:\Users\masat\projectX\apps\configurator.py", line 16, in <module> 6 config = Configurator.user_config("demo") 7 File "C:\Users\masat\projectX\apps\configurator.py", line 10, in user_config 8 with open(config_path, "r", encoding='utf-8') as yaml_file: 9FileNotFoundError: [Errno 2] No such file or directory: 'users/demo/config.yml'
##備考
備考1.以下のロジックでうまくファイルを取得できる想定でした。
① 下記コードを実行することで,
python
1# apps/configurator.py 2os.chdir(os.path.dirname(os.path.abspath(__file__)))
下記のように「★カレントディレクトリ」が変更される
projectX |_apps |_configurator.py ★カレントディレクトリ ★実行ファイル ★パスの起点 |_users |_demo |_config.yml ★欲しいファイル
② 次に下記コードを実行することで,
python
1# apps/configurator.py 2sys.path.append('..')
下記のように「★パスの起点」が変更される
projectX ★パスの起点 |_apps |_configurator.py ★カレントディレクトリ ★実行ファイル |_users |_demo |_config.yml ★欲しいファイル
③ 次に下記コードを実行することで,
python
1config_path = f'users/{user_name}/config.yml' # {user_name} = 'demo' 2 with open(config_path, "r", encoding='utf-8') as yaml_file:
結果「★欲しいファイル」に到達する....という想定だったが実際は「FileNotFoundError」が発生する 涙
####備考2.カレントディレクトリを「os.chdir」でファイルの置き場所に移動している理由
この投稿では話をシンプルにするために「configurator.py」を直接実行していますが,実際は「configurator.py」は別のファイルのモジュールなので,実行ファイルの場所に依存しないようにしたいからです。
回答2件
あなたの回答
tips
プレビュー