Python中移动文件

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 中,如何将一个目录移动到另一个已存在的目录中?


你想要移动目录中的所有内容到另一个目录,还是移动整个目录本身? - 182764125216
6个回答

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

等同于

move c:\a c:\b

在Windows命令行下


7

您可以尝试使用Shutil模块。


2
具体来说,shutil.move(srcFile, destFile)。 - PTBNL

1

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

os.rename("c:/a/", "c:/b/a") --> 将文件夹 b 移动到文件夹 a 中


0

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

它是一个很好的轻量级封装,围绕内置的“os.path”模块。

还有代码:

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

有点奇怪,因为这个有特殊的函数可以处理:
last_part = os.path.basename(src)

很好的观点——忘记了basename。我不喜欢有多种方法来做这件事。;-) - cdleary

-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 看起来可以满足您的需求:

如果目标是一个目录或符号链接到目录,则源将移动到该目录中。

(以及它的 source。)


不幸的是,如果文件位于不同的卷上,这将无法成功。 - Wojciech Bederski
@wuub:你为什么这么说?文档中说在一些UNIX文件系统中存在古怪的行为,但OP谈论的是Windows。 - cdleary
嗯,对于单个目录来说,这很简单,但是将一个大的目录结构移动到另一个文件夹中确实很不方便。很奇怪的是Python不支持这个功能。 - Ash
它可以使用shutil.move函数,导入方式为:import shutil; shutil.move(src, dst)。 - cdleary
@cdleary: 你是对的,我不建议使用os.rename,因为在编写玩具FUSE文件系统时,我曾遇到过一些问题,而shutil无论在哪个操作系统上都表现出色。 - Wojciech Bederski

-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"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接