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

第 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
4

3 回答 3

6

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

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

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

看看atomicfile.atomic_rename()在 Windows 上是如何实现的。

于 2012-10-23T08:55:53.990 回答
3

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

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

于 2012-10-23T07:22:18.097 回答
0

您尝试使用的名称已经属于某物。即,已经有一个文件名为:

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

为您的函数添加检查

于 2012-10-23T07:21:54.510 回答