python os.makedirs不创建目录

python os.makedirs doesn't create directory

出于一些愚蠢的原因,下面的工作是创建存储在output_result_dir中的非现有目录,而不是存储在output_log_dir中的非现有目录。后者导致fileNotFound错误,描述为"[winError 3]系统找不到指定的路径:"runpackage1calculatedlogs"。

1
2
3
4
5
6
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以从相对路径到完整路径,但这也没有帮助。

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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)

输出:

1
2
3
4
5
6
('./', [])        # before

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

创建mcve解决了您的问题。

1
2
3
4
5
6
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

修复:

1
2
3
4
5
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


给定的代码没有错误,您修复了它。

1
2
3
4
5
6
7
output_dir = '.'
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)