为什么os.rename()在Python 2.7中引发异常?

时间:2012-10-23 07:15:23

标签: python windows file errno

print(path)
print(dir_name+"\\"+f_parent+"_"+parts[0]+"_"+date+extension)
os.rename(path, dir_name+"\\"+f_parent+"_"+parts[0]+"_"+date+extension)

第1行和第1行2是调试和语句,这些打印:

D:\Doc\Papa\Photos\2012\2012_07_divers\CSC_3709.jpg
D:\Doc\Papa\Photos\2012\2012_07_divers\2012_07_divers_CSC_3709_2012_07_06_21_04_26.jpg

第3行提出:

File "D:\Doc\Papa\scripts\python\photosort\photosort.py", line 83, in rename
  os.rename(path, dir_name+"\\"+f_parent+"_"+parts[0]+"_"+date+extension)
WindowsError: [Error 183] Impossible de créer un fichier déjà existant

转换为:

 WindowsError: [Error 183] Can not create a file that already exists

3 个答案:

答案 0 :(得分:5)

在Python 3.3+上,您可以使用os.replace()而不是os.rename()来覆盖现有文件并避免Windows上的错误。

在较旧的Python版本上,您可以使用ctypes模块模拟os.replace()

# MOVEFILE_REPLACE_EXISTING = 0x1; MOVEFILE_WRITE_THROUGH = 0x8
ctypes.windll.kernel32.MoveFileExW(src, dst, 0x1)

了解如何在Windows上实施atomicfile.atomic_rename()

答案 1 :(得分:3)

来自Windows system error codes list

  

ERROR_ALREADY_EXISTS

     

183(0xB7)

     

当该文件已存在时无法创建文件。

您正在尝试创建已存在的文件。首先删除它或选择不同的文件名。

作为奖励提示:使用os.path.join()功能正确加入路径:

os.path.join(dir_name, '{0}_{1}_{2}{3}'.format(f_parent, parts[0], date, extension))

我还使用string formatting来创建你的文件名。

答案 2 :(得分:0)

您尝试使用的名称已属于某些内容。即,已经存在一个名为:

的文件
D:\Doc\Papa\Photos\2012\2012_07_divers\2012_07_divers_CSC_3709_2012_07_06_21_04_26.jpg

为您的功能添加支票