Ответ 1
Я нашел этот код работающим.
from distutils.dir_util import copy_tree
# copy subdirectory example
fromDirectory = "/a/b/c"
toDirectory = "/x/y/z"
copy_tree(fromDirectory, toDirectory)
У меня есть каталог /a/b/c, который имеет файлы и подкаталоги. Мне нужно скопировать каталог /a/b/c/ * в каталог /x/y/z. Какие методы python я могу использовать?
Я пробовал shutil.copytree("a/b/c", "/x/y/z")
, но python пытается создать /x/y/z и вызывает error "Directory exists"
.
Я нашел этот код работающим.
from distutils.dir_util import copy_tree
# copy subdirectory example
fromDirectory = "/a/b/c"
toDirectory = "/x/y/z"
copy_tree(fromDirectory, toDirectory)
Вы также можете использовать glob2 для рекурсивного сбора всех путей (используя подкаталоги ** подпапок), а затем использовать файл shutil.copy, сохраняя пути
glob2 link: https://code.activestate.com/pypm/glob2/
Библиотеки 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('..')