首页 > 解决方案 > python os.makedirs 不创建目录

问题描述

output_result_dir出于某种愚蠢的原因,以下内容适用于创建存储在中的不存在目录,而不是存储在中的非现有目录output_log_dir。后者导致 FileNotFound 错误,描述为“[WinError 3] 系统找不到指定的路径:'runpackage1\calculated\logs'”

log_dir = os.path.join(output_dir, 'logs')
output_config_dir = os.path.join(output_dir, 'config')
output_result_dir = os.path.join(output_dir, 'results')
for directory in [output_result_dir, log_dir, output_config_dir]:
    if not os.path.exists(directory):
        os.makedirs(directory)

我在这里错过了一些非常愚蠢的东西吗?我还尝试在路径周围插入一个 os.path.abspath 以从相对路径到完整路径,但这也无济于事。

编辑:正如某些人正确指出的那样,从路径更改了目录。实际上,我在这里将两个独立函数的代码复制到了一个独立的块中,因此引入了错误。这不是导致我的问题的问题。

标签: python

解决方案


无法确认您的错误(https://pyfiddle.io - 3.6):

import os 

for root,dirs,files in os.walk("./"):
    print (root,dirs)
print("")

output_dir = "./temp"
log_dir = os.path.join(output_dir, 'logs')
output_config_dir = os.path.join(output_dir, 'config')
output_result_dir = os.path.join(output_dir, 'results')
for directory in [output_result_dir, log_dir, output_config_dir]:
    os.makedirs(directory)

for root,dirs,files in os.walk("./"):
    print (root,dirs)

输出:

('./', [])        # before

('./', ['temp'])  # after
('./temp', ['results', 'logs', 'config'])
('./temp/results', [])
('./temp/logs', [])

创建 mcve 解决了您的问题。


log_dir = os.path.join(output_dir, 'logs')
output_config_dir = os.path.join(output_dir, 'config')
output_result_dir = os.path.join(output_dir, 'results')
for directory in [output_result_dir, log_dir, output_config_dir]:   # using directory
    if not os.path.exists(path):                                    # using path
        os.makedirs(path)                                           # using path

您也不需要警卫if not os.path.exists(path):-不需要,因为如果目录已经存在-os.makedirs(path)只要您给,使用不会改变exists_ok=True

使固定:

log_dir = os.path.join(output_dir, 'logs')
output_config_dir = os.path.join(output_dir, 'config')
output_result_dir = os.path.join(output_dir, 'results')
for directory in [output_result_dir, log_dir, output_config_dir]:   # directory
    os.makedirs(directory, exists_ok=True)                          # directory

推荐阅读