os.rename() fails, in use by another process

file, python

Solution

You open the file 2 lines before you try to call `os.rename` on it, but you don't close it before trying to rename it, so your own program still has it open.

Call `self.newFile.close()` before the `os.rename()` and you should avoid that error - or better yet, don't call `open()` at all before the rename, given that you're not actually using the opened file (and you open it right after the rename anyway).

Some tangential notes:

You shouldn't name a variable `file` - there's already a type named `file` that you're shadowing if you do that.

You duplicate a lot of code - for instance, you just created `self.backupName` on the line above the rename, but then you re-calculate it. Why not just pass `self.backupName` as the second argument to `os.rename()`?

You can skip the `find` call and subsequent slicing by using `os.path.splitext()`.

All in all, you could condense your code down to this:

while self.fileSet.hasMoreFiles():
    curFile = self.fileSet.nextFile()
    baseName, extension = os.path.splitext(curFile)
    self.backupName = baseName + "_bak" + extension
    os.rename(curFile, self.backupName)
    self.newFile = open(curFile, 'w+')
    self.writeNew()

Problem

So I'm trying to rename a file, and it keeps saying "The process cannot access the file because it is being used by another process." But I know it's not being used by another process so I'm not sure what's going on. Here's my code ``` while self.fileSet.hasMoreFiles(): file = self.fileSet.nextFile() periodIndex=file.find(".") extension = file[periodIndex:] baseName=file[:periodIndex] self.newFile=open(file, 'w+') self.backupName = baseName + "_bak" + extension os.rename(file, baseName + "_bak" + extension) self.newFile=open(file, 'w+') self.writeNew() ```

Original source