如何使用Python复制带有目录结构/路径的文件?

64

首先要说明的是,我是Python的新手。

现在我有一个文件位于:

a/long/long/path/to/file.py

我想将文件复制到我的主目录,并创建一个新的文件夹:

/home/myhome/new_folder

我的期望结果是:

/home/myhome/new_folder/a/long/long/path/to/file.py
有没有现成的库可以做到这一点?如果没有,我该如何实现?

3
这里有一个解释:https://dev59.com/CHI-5IYBdhLWcg3wJE4K - Samuele Mattiuzzo
1
可能是 http://docs.python.org/library/shutil.html#shutil.copyfile 吗? - Anton Bessonov
1
@Anderson Green:这不是重复问题。如果接受的答案交换,对于这些问题来说是无法工作的。它们密切相关(在Python中复制东西);但并不意味着它们完全相同。请在下次投票关闭之前阅读完整个问题并查看答案。 - jfs
虽然这是一段时间以前的事情,但总的来说,如果有一个类似但不完全相同的问题,一个好的策略是在自己的问题中引用现有的问题,并说明自己的问题有何不同。 - Hugh Perkins
2个回答

81

在复制之前,您可以使用os.makedirs()来创建所有中间目录:

import os
import shutil

srcfile = 'a/long/long/path/to/file.py'
dstroot = '/home/myhome/new_folder'


assert not os.path.isabs(srcfile)
dstdir =  os.path.join(dstroot, os.path.dirname(srcfile))

os.makedirs(dstdir) # create all directories, raise an error if it already exists
shutil.copy(srcfile, dstdir)

对于最后一行,dstdir 是一个目录,应该这样写: os.makedirs(dstdir) dstfile = os.path.join(dst, src) shutil.copyfile(src, dstfile) - Js Lim
@RebornJs:copy()函数支持将目录作为第二个参数进行复制(注意:copy()copyfile()的区别)。 - jfs
哦,谢谢。我正在编写我的第一个Python脚本,不太了解现有库。 - Js Lim
拼写错误,在第 'assert not os.path.isabs(scrfile)' 行中,将 scrfile 更正为 srcfile - Tanky Woo

25

请查看shutilshutil.copyfile(src, dst)可将文件复制到另一个文件中。

请注意,shutil.copyfile不会创建不存在的目录。如需创建,请使用os.makedirs


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