使用python os.rename时出错[183]

时间:2012-01-24 16:50:42

标签: python

这是我第一次使用python并且我一直遇到错误183.我创建的脚本在网络中搜索所有'.py'文件并将它们复制到我的备份驱动器。请不要嘲笑我的剧本,因为这是我的第一个。

我在脚本中做错了什么线索?

import os
import shutil
import datetime

today = datetime.date.today()
rundate = today.strftime("%Y%m%d")

for root,dirr,filename in os.walk("p:\\"):
    for files in filename:
        if files.endswith(".py"):
            sDir = os.path.join(root, files)
            dDir = "B:\\Scripts\\20120124"
            modname = rundate + '_' + files
            shutil.copy(sDir, dDir)
            os.rename(os.path.join(dDir, files), os.path.join(dDir, modname))
            print "Renamed %s to %s in %s" % (files, modname, dDir)

2 个答案:

答案 0 :(得分:4)

我猜你在Windows上运行脚本。根据{{​​3}}错误183是ERROR_ALREADY_EXISTS

所以我猜测脚本失败了,因为你试图通过现有文件重命名文件。

也许您每天不止一次运行脚本?这将导致所有目标文件已经存在,因此当脚本再次运行时重命名失败。

如果您特别想要覆盖这些文件,那么您应该首先使用os.unlink删除它们。

答案 1 :(得分:1)

鉴于错误183是[Error 183] Cannot create a file when that file already exists的事实,您很可能在os.walk()调用中找到2个同名文件,并且第一个成功重命名后,第二个将失败要重命名为相同的名称,这样您将得到一个文件已存在错误。

我建议在os.rename()调用周围尝试使用try / except来处理这种情况(在名称或其他内容后面添加数字)。

[是的,我知道问这个问题已经有7年了,但是如果我从Google搜索中来到这里,也许其他地区也能找到它,这个答案可能会有所帮助。]