我有一个目录 /a/b/c,其中包含文件和子目录。
我需要将 /a/b/c/* 复制到 /x/y/z 目录中。我可以使用哪些 Python 方法?
我尝试过 shutil.copytree("a/b/c", "/x/y/z"),但是 Python 会尝试创建 /x/y/z 并引发 "目录已存在" 错误。
我尝试过 shutil.copytree("a/b/c", "/x/y/z"),但是 Python 会尝试创建 /x/y/z 并引发 "目录已存在" 错误。
我发现这段代码在标准库中可以工作:
from distutils.dir_util import copy_tree
# copy subdirectory example
from_directory = "/a/b/c"
to_directory = "/x/y/z"
copy_tree(from_directory, to_directory)
参考资料:
update=1
。 - Hai Vufrom subprocess import call
def cp_dir(source, target):
call(['cp', '-a', source, target]) # Linux
cp_dir('/a/b/c/', '/x/y/z/')
对我来说它有效。 基本上,它执行shell命令cp。
使用这个函数已经过时了,Python的库也不再需要了。我写了一个能正常工作的替代品:
import os
import shutil
def copydirectorykut(src, dst):
os.chdir(dst)
list=os.listdir(src)
nom= src+'.txt'
fitx= open(nom, 'w')
for item in list:
fitx.write("%s\n" % item)
fitx.close()
f = open(nom,'r')
for line in f.readlines():
if "." in line:
shutil.copy(src+'/'+line[:-1],dst+'/'+line[:-1])
else:
if not os.path.exists(dst+'/'+line[:-1]):
os.makedirs(dst+'/'+line[:-1])
copydirectorykut(src+'/'+line[:-1],dst+'/'+line[:-1])
copydirectorykut(src+'/'+line[:-1],dst+'/'+line[:-1])
f.close()
os.remove(nom)
os.chdir('..')
copytree
暗示了前者,但我只是想确认一下。 - Carlos/x/y/z/
目录 (shutil.rmtree()
),然后再执行copytree()
? - Eric O. Lebigot/a/b/c/t/u
,您是否需要保留任何/x/y/z/t/v
?也就是说,您只需要创建/覆盖,而不删除任何内容吗? - Eric O. Lebigotcopytree
函数的dirs_exist_ok=True
参数,该问题已不再存在。详情请参见文档。 - Jay