在python下移动文件

在python下移动文件,python,windows,move,Python,Windows,Move,我对在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下移动文件感到困惑。 在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中,如何将一个目录移动到另一个现有目录?

您需要说明将其移动到的完整路径:

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
通过查看其文档可以实现您想要的功能:

如果目标是目录或指向目录的符号链接,则 来源 在目录中移动

(及其。)

您可以尝试使用该模块

相当于

move c:\a c:\b

在windows命令行下,当我需要许多文件系统操作时,我更喜欢使用“路径”模块:

它是一个围绕内置“os.path”模块的非常好的轻量级包装器

另代码:

last_part = os.path.split(src)[1]
有点奇怪,因为它有特殊的功能:

last_part = os.path.basename(src)
os.rename(“c:/a/”,“c:/b”/-->更改文件夹b中文件夹a的名称

os.重命名(“c:/a/”,“c:/b/a”)-->使用Twisted's将文件夹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"))

不幸的是,如果文件位于不同的卷上,这将失败。@wuub:你为什么这么说?文档说在一些UNIX文件系统中有奇怪的行为,但是OP是在谈论Windows。嗯,对于单个目录来说这很简单,但是用这种方式将一个大的目录结构移动到另一个文件夹确实不方便。很奇怪python不支持这个,它支持--shutil.move,您可以通过以下方式使用:import shutil;shutil.move(src,dst)@cdleary:你说得对,我建议不要使用os.rename,因为我过去在编写toy FUSE文件系统时遇到过一些问题,而shutil在另一方面无论是什么操作系统都能很好地工作。具体地说,shutil.move(srcFile,destFile)非常好的一点——忘记了basename。我不喜欢有不止一种方法可以做到这一点要将目录的所有内容移动到另一个目录还是移动目录本身?
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"))