python - os.rename() 失败,正在被另一个进程使用

标签 python file

所以我试图重命名一个文件,它一直说“该进程无法访问该文件,因为它正被另一个进程使用。”但我知道它没有被另一个进程使用,所以我不确定发生了什么。这是我的代码

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()

最佳答案

您在尝试调用 os.rename 之前打开文件 2 行,但在尝试重命名之前没有关闭它,因此您自己的程序仍然打开它。

os.rename() 之前调用 self.newFile.close() 并且您应该避免该错误 - 或者更好的是,不要调用 open() 在重命名之前完全没有,因为您实际上并没有使用打开的文件(并且您在重命名之后立即打开它)。


一些切线注释:

  • 您不应该将变量命名为 file - 如果您这样做,您正在隐藏一个名为 file 的类型。

  • 您重复了很多代码 - 例如,您刚刚在重命名上方的行中创建了 self.backupName,但随后您重新计算了它。为什么不将 self.backupName 作为第二个参数传递给 os.rename()

  • 您可以使用 os.path.splitext() 跳过 find 调用和后续切片.

总而言之,您可以将代码压缩为:

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()

关于python - os.rename() 失败,正在被另一个进程使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21493278/

相关文章:

python - 如何处理与 argparse 相关的命令行参数?

Python时间表 "Time is freezing"

java - 在 Java 中处理文件路径的最佳方式是什么?

c - fseek 的性能开销是多少?

java - 写入已存在的文件 - 但我有一个问题

使用 Vim 折叠 Python 代码

python - 将 A 列列表中的最后一个值添加到 b 列列表中

c - 在 Ubuntu 的终端中查找文件及其在目录中的路径,argv [2] 中给出的文件名

python - python3构建的Sublime Text 2编码错误

c++ - Visual Studio : Not found resources下的C/C++项目