這個博客的目的很簡單,希望用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)