Windows 10上的Python:os.rename()找不到os.path.exists()找到的文件?

时间:2016-11-11 23:28:35

标签: python windows pathname

我想知道os.rename():尽管os.path.exists()表示该文件存在,但os.rename()表示无法找到它。这是代码片段:

        try:
            if (os.path.exists(sourcePath)):
                print('Safe: %s does exist!' % sourcePath)
            os.rename (sourcePath, newPath)
        except Exception as e:
            print('Error renaming "%s":' % sourcePath)
            raise e

在名为Y:\home\Paul\PaulsBilder\images\..\import\batch0\2012-05 Neuruppin\12-05 - 0 2.JPG的文件上运行此命令会产生以下输出:

Safe: Y:\home\Paul\PaulsBilder\images\..\import\batch0\2012-05  Neuruppin\12-05 - 0 2.JPG does exist!
Error renaming "Y:\home\Paul\PaulsBilder\images\..\import\batch0\2012-05  Neuruppin\12-05 - 0 2.JPG":
Traceback (most recent call last):
 :
WindowsError: [Error 3] Das System kann den angegebenen Pfad nicht finden

(德语Windows:“系统找不到指定的路径。”)我一直在使用这段代码而没有问题,但可能永远不会在带有空格的文件名上...但是当我用空格替换空格时下划线,仍无法找到文件名。

其他一切都必须是错的,但是什么?

编辑:删除/../组件(通过在其周围包裹os.normpath())没有帮助。

1 个答案:

答案 0 :(得分:0)

非常感谢,Skycc,你是完全正确的:发生错误是因为新路径名的目录不存在。傻我。

这个有用 - 确保os.makedirs()只被调用一次:

        try:
            if (os.path.exists(sourcePath)):
                print('Safe: %s does exist!' % sourcePath)
            (head, tail) = os.path.split(newPath)  # @UnusedVariable
            if (not os.path.exists(head)):
                os.makedirs(head)
            os.rename(sourcePath, newPath)
        except Exception as e:
            print('Error renaming "%s" to "%s":' % (sourcePath, newPath))
            raise e