8

我对在 python 下移动的文件感到困惑。在 Windows 命令行下,如果我有目录 c:\a 和目录 c:\b,我可以

move c:\a c:\b

将 a 移动到 b 结果是目录结构 c:\b\a

如果我用 os.rename 或 shutil.move 试试这个:

os.rename("c:/a", "c:/b")

我明白了

WindowsError: [Error 17] Cannot create a file when that file already exists

如果我在 c:\a 下移动单个文件,它可以工作。

在 python 中,如何将目录移动到另一个现有目录?

4

6 回答 6

16
os.rename("c:/a", "c:/b/a") 

相当于

move c:\a c:\b

windows命令行下

于 2009-07-09T09:46:37.460 回答
7

您可以尝试使用Shutil模块。

于 2009-07-09T09:43:43.630 回答
1

os.rename("c:/a/", "c:/b"/) --> 更改文件夹 b 中文件夹 a 的名称

os.rename("c:/a/", "c:/b/a") --> 将文件夹 b 放入文件夹 a

于 2009-07-09T10:09:12.237 回答
0

当我需要许多文件系统操作时,我更喜欢使用“路径”模块: http:
//pypi.python.org/pypi/path.py/2.2

它是一个非常好的和轻量级的内置 'os.path' 模块的包装器。

还有代码:

last_part = os.path.split(src)[1]

有点奇怪,因为这有特殊的功能:

last_part = os.path.basename(src)
于 2009-07-09T10:04:44.930 回答
-1

您需要说明它被移动到的完整路径:

src = 'C:\a'
dst_dir = 'C:\b'
last_part = os.path.split(src)[1]
os.rename(src, os.path.join(dst_dir, last_part))

实际上,它看起来shutil.move会通过查看它的文档来做你想做的事情:

如果目标是目录或目录的符号链接,则源将移动到目录内。

(及其来源。)

于 2009-07-09T09:43:11.867 回答
-1

使用 Twisted 的FilePath

from twisted.python.filepath import FilePath
FilePath("c:/a").moveTo(FilePath("c:/b/a"))

或者,更一般地说:

from twisted.python.filepath import FilePath
def moveToExistingDir(fileOrDir, existingDir):
    fileOrDir.moveTo(existingDir.child(fileOrDir.basename()))
moveToExistingDir(FilePath("c:/a"), FilePath("c:/b"))
于 2009-07-09T10:34:00.627 回答