为什么我的os.rename不工作?

时间:2010-03-30 00:17:00

标签: python rename

我正在尝试重命名一些文件,但是遇到一个令人困惑的错误*。当我运行时:

if os.path.isfile(fullPath):
    print 'fmf exists'
    print fullPath
    print newFilePath
    os.rename(fullPath,newFilePath)

我收到以下错误:

fmf exists
(correct fullPath)
(correct newFilePath, ie. destination)
Traceback (most recent call last):
  File "whatever.py", line 374, in ?
    os.rename(fullPath,newFilePath)
OSError: [Errno 2] No such file or directory

由于我知道 fullPath上的文件存在,我对此错误感到困惑。当然,newFilePath不存在,因为那会很愚蠢。任何提示?

谢谢! 亚历

*不是全部吗?

4 个答案:

答案 0 :(得分:1)

如果您尝试复制到不存在的目录,仍然可以获得异常。

答案 1 :(得分:1)

我无法看到代码的完整内部工作原理,所以这是我的两分钱:

您的newFilePath可能包含不存在的目录。如果是这种情况,那么根据您的操作系统,您的程序无法在不存在的目录中创建文件。那可能是你的错误。

希望这有帮助

答案 2 :(得分:0)

好像海报解决了他的问题,但我有相同的症状,原因似乎有所不同。我试图重命名的文件刚刚在前一行的子进程调用中创建。如果我再次运行我的脚本,我没有重命名问题,因为该文件是在上一次运行中创建的,但是如果我删除了之前创建的文件,我将会遇到重命名问题。似乎os.rename在子进程完成之前被调用,因此要重命名的文件尚不存在。我在子进程调用之后插入了一个os.wait(),我相信这已经解决了我的问题。

答案 3 :(得分:0)

当我的新文件名包含正斜杠时,我遇到了同样的错误,这与Unix和Linux中的目录分隔符混淆。例如,将文件重命名为“4/27 / 2015.txt”会导致一个不存在的目录,并导致“没有这样的文件或目录”。您可以通过将正斜杠替换为任何其他可接受的字符来解决此问题。