I have a python tool to ‘touch’ (utime) a file, then move to another folder. However, if the file already exists in the destination folder, it is silently overwritten. I would like to check for a file of the same name in the destination folder and, if it exists, rename the one I am moving to its name plus ‘-n‘ at the end, where n is a number starting at ‘1’ and, if the file with ‘-1’ at the end already exists, ‘-2’ etc.
For example, say in the source folder is a file ‘foo.txt’, but there is one ‘foo.txt’ in the destination folder as well. This function should return ‘(absolute path)/foo-1.txt’.
So, I have made a function to check for these circumstances and return the modified string, so I can use rename later and not overwrite. However, currently, if the file exists, it returns nothing. Following is the function code, assuming these vars:
fileName – input filepath, absolute path. e.g. /Users/foo/sourceFolder/bar.txt
index – iterator variable, set to ‘1’ at the start of each file being opened (externally to function)
def checkExists(fileName):
global index
print "checkExists(" + fileName + ")"
if exists(fileName):
splitPath = split(newFile)
splitName = splitext(splitPath[1])
newSplitName = splitName[0] + "-" + str(index)
index += 1
newName = splitPath[0] + "/" + newSplitName + splitName[1]
print "newName = " + newName
else:
print "(else) fileName = " + fileName
print "(else) fileName = " + str(type(fileName))
print ""
return fileName
checkExists(newName)
Now it seems that the inner call for checkExists() at the end is not running.
I hope I have been clear in my explanation.
IAmThePiGuy
P.S. I do not want to hear about potential race problems with utime, I know that the files in the source directory will not be accessed by anything else.
Your problem is that, if the file exists, you don’t return anything. I think you’re intending to use recursion to check the new filename, but you don’t return the result of that call. Here’s a stab:
I also took the liberty of moving the recursive call closer to the generation of
newNameand removing the global variable and replacing that with recursion as well.