2016-09-06 5 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?

Я пропустил очевидное здесь? Код работал до того, как я переместил файлы вверх. Я работаю с Pycharm на Windows 7, если это имеет какое-то значение.

+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