这个博客的目的很简单,希望用Shutil实现目录拷贝,并且在目标文件夹中保持源文件夹中的目录结构,但是如果直接用:
shutil.copy(source_dir,des_dir)
这种写法,可能会报:PermissionError: [Errno 13] Permission denied,这种错误(像其他网友也讨论了这种情况:https://stackoverflow.com/questions/39844123/permissionerror-errno-13-permission-denied-python)。那么我们需要一种更可靠稳定的方法(虽然可以用os.system来运行windows系统命令,但毕竟用shutil可以实现更多更丰富的功能),所以下面的代码提供一种可靠的拷贝方法,方便大家使用和参考:
import shutil
import os
source_dir='源文件夹'
des_dir='目标文件夹'
if(os.path.exists(des_dir)):
shutil.rmtree(des_dir)
os.mkdir(des_dir)
for dirpath, dirnames, filenames in os.walk(source_dir):
for each_file in filenames:
path=os.path.join(dirpath,each_file)
relative_path=path[path.index(source_dir)+len(source_dir)+1:path.rindex('\\')]
dirs=relative_path.split('\\')
for i in range(0,len(dirs)):
this_dir="/"
for j in range(0,i+1):
this_dir=this_dir+dirs[j]+'/'
if(not os.path.exists(des_dir+this_dir)):
os.mkdir(des_dir+this_dir)
shutil.copyfile(path, des_dir+'/'+relative_path+'/'+each_file)