Windows系统中用Python Shutil拷贝文件夹并保持目录结构的方法([Errno 13] Permission denied的解决办法)

这个博客的目的很简单,希望用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)

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值