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

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

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

 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 

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

从Windows系统错误代码列表 :

ERROR_ALREADY_EXISTS

183(0xB7)

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

您正试图创建一个已经存在的文件。 先删除它或选择一个不同的文件名。

作为奖励提示:使用os.path.join()函数来正确地加入路径:

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

我也使用字符串格式来创建您的文件名。

你试图使用的名字已经属于某种东西。 也就是说,已经有一个文件叫做:

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

添加一个支票到你的功能