I am trying to create a directory. If the name already exists, then it appends "_1" to the directory name recursively.
This runs fine if the directory does not exist already. It also runs fine if the directory already exists (it creates directory+"_1" and returns the same). However, if the directory + "_1" already exists, then the function creates directory+"_1_1" but returns None.
import os
def recurs_mkdir(out_dir):
try:
os.mkdir(out_dir)
except OSError:
out_dir += "_1"
recurs_mkdir(out_dir)
else:
print "Returning: %s" % out_dir
return out_dir
>>> print recurs_mkdir("existing_folder")
Returning: existing_folder_1
None
Why does it return None in the case of an exception?
EDIT: Nneoneo's answer works if "exisiting_folder" exists, but does not behave properly if "existing_folder" and "existing_folder_1" exist. Modified, the function is
import os
def recurs_mkdir(out_dir):
try:
os.mkdir(out_dir)
except OSError:
out_dir += "_1"
recurs_mkdir(out_dir)
print "Returning: %s" % out_dir
return out_dir
else:
print "Returning: %s" % out_dir
return out_dir
If "existing_folder" is already created:
>>> recurs_mkdir("existing_folder")
Returning: existing_folder_1
Returning: existing_folder_1
existing_folder_1
If "existing_folder" and "existing_folder_1" already exist:
>>> recurs_mkdir("existing_folder")
Returning: existing_folder_1_1
Returning: existing_folder_1_1
Returning: existing_folder_1
existing_folder_1
EDIT 2: Answer from Nneoneo
import os
def recurs_mkdir(out_dir):
try:
os.mkdir(out_dir)
except OSError:
out_dir += "_1"
return recurs_mkdir(out_dir)
else:
print "Returning: %s" % out_dir
return out_dir