For some silly reason, the below works on creating the non-existing directory stored in output_result_dir
, but not the non_existing directory stored in output_log_dir
. The latter results in a FileNotFound Error with description "[WinError 3] The system cannot find the path specified: '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)
Am I missing something really stupid here? I also tried inserting an os.path.abspath around the path to get from relative to full paths, but that didn't help either.
Edit: changed directory from path as some people rightfully pointed out. I actually copied code from two separate functions into one self-contained block here, hence introducing the error. It's not the issue that caused my problem.
Not able to confirm your bug ( 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)
Output:
('./', []) # before
('./', ['temp']) # after
('./temp', ['results', 'logs', 'config'])
('./temp/results', [])
('./temp/logs', [])
Creating the mcve fixed your problem.
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
You also do not need the guard if not os.path.exists(path):
- it is not needed because if the directory already exists - using os.makedirs(path)
won't change that provided you give exists_ok=True
.
Fix:
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
The given code has no errors, you fixed it.
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)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.