2016-09-06 17 views
1

最近私の設定ファイルをプロジェクトの別のフォルダに移動しました。私はこのようなロードしよう:Python:os.listdirファイルが見つかりません

CONFIG_PATH = os.path.abspath(os.path.dirname(os.path.abspath(__file__))+"/../config/")  

def load_config(): 
    configs = {} 
    for config in os.listdir(CONFIG_PATH): 
     configs[str(config)[0:-12]] = json.load(open(config)) 
    return configs 

私は

D:/.../MyProject/src 

からコードを実行しているし、指定CONFIGPATHが正しくその繰り返しループで今すぐ

D:/.../MyProject/config 

に設定されています、 open(config)は例外を発生させます:

FileNotFoundError: [Errno 2] No such file or directory: 'sample.config.json' 

なぜ私のプログラムはファイルを開くことができないのかわかりません。明らかに存在するのは、os.listdirです。実際には、ループ内のprint(config)はその名前のファイルがあることを確認します。だからなぜそれが開きませんし、代わりにFileNotFoundErrorを発生させるでしょうか?

私はここで明らかに欠場しますか?ファイルを上に移動する前にコードが機能しました。 Windows 7のPycharmと一緒に作業していますが、これは関連性があります。

+5

はい、明らかなものがありません。その名前のファイルは存在しますが、適切なパスを使わずにファイルの名前を 'open()'に渡すだけです。 –

+0

関連していませんが、['os.path.join()'](https://docs.python.org/3/library/os.path.html#os.path.join)の使用に慣れてください。パスを構築する。 – Tomalak

+0

ありがとう、私はパスなどを再構築するときにそれを逃した。 – Domino

答えて

0

os.listdirは、完全なパスではなく、ファイルの名前のみを返します。

3.5の場合は、返されたアイテムにパス属性があるos.scandirを使用できます。あなたがそれほど幸運でないならば、自分で完全な経路を構築する必要があります。

あなたの場合は:json.load(open(os.path.join(CONFIG_PATH, config)))です。

+0

ありがとう、私はこれを固定しました。私は3.4を使っていますが、 'os.scandir'は本当に素敵です。 – Domino

関連する問題