python 实现目录复制的三种小结
作者:weixin_42269099 时间:2023-09-01 12:17:20
复制目录: 包含多层子目录
方法: 递归, 深度遍历,广度遍历
深度遍历&广度遍历:
思路:
1.获得源目录子级目录,并设置目标目录的子级路径
1.1在此就创建两个栈(或者队列),将原目录和目标目录分别添加到栈(或者队列)里面,一般用append添加,加在栈的顶部,队列的后部
1.2深度遍历 从栈的顶部取出一个原路径去判断,同时用同样的方式取出目标路径(栈和队列都类似于list,都可以用list实现)
广度遍历 从队列的前面取出一个原路径去判断,同时用同样的方式取出目标路径
2.判断原子级路径是否是文件
2.1如果目标子级文件不存在 或者目标子级文件存在,但是子级大小不一致,则复制
3.判断原子级目录是否是目录
3.1.递归 调用自己,把自己的子级目录当作源文件,复制到目标子级目录
3.2.深度遍历 广度遍历 都将原目录和目标目录添加(append)到栈(队列)的后面'''
# 深度遍历 广度遍历(仅取出来的方式不一样)
# 导入模块
import os, collections
def copyDir(sourcePath,targetPath):
# 传入原目录,和需要复制后的目标目录
# 判断需要复制的目录是否存在,如果不存在就返回
if not os.path.isdir(sourcePath):
return '源目录不存在'
# 创建两个栈,一个用来存放原目录路径,另一个用来存放需要复制的目标目录
sourceStack = collections.deque()
sourceStack.append(sourcePath)
targetStack = collections.deque()
targetStack.append(targetPath)
# 创建一个循环当栈里面位空时结束循环
while True:
if len(sourceStack) == 0:
break
# 将路径从栈的上部取出
sourcePath = sourceStack.pop() #sourcePath = sourceStack.popleft()
# 遍历出该目录下的所有文件和目录
listName = os.listdir(sourcePath)
# 将目录路径取出来
targetPath = targetStack.pop() #targetPath = targetStack.popleft()
# 判断该目标目录是否存在,如果不存在就创建
if not os.path.isdir(targetPath):
os.makedirs(targetPath)
# 遍历目录下所有文件组成的列表,判断是文件,还是目录
for name in listName:
# 拼接新的路径
sourceAbs = os.path.join(sourcePath, name)
targetAbs = os.path.join(targetPath, name)
# 判断是否时目录
if os.path.isdir(sourceAbs):
# 判断目标路径是否存在,如果不存在就创建一个
if not os.path.exists(targetAbs):
os.makedirs(targetAbs)
# 将新的目录添加到栈的顶部
sourceStack.append(sourceAbs)
targetStack.append(targetAbs)
# 判断是否是文件
if os.path.isfile(sourceAbs):
# 1.如果目标子级文件不存在 或者目标子级文件存在但是该文件与原子级文件大小不一致 则需要复制
if (not os.path.exists(targetAbs)) or (os.path.exists(targetAbs) and os.path.getsize(targetAbs) != os.path.getsize(targetAbs)):
rf = open(sourceAbs, mode='rb')
wf = open(targetAbs, mode='wb')
while True:
# 一点一点读取,防止当文件较大时候内存吃不消
content = rf.read(1024*1024*10)
if len(content) == 0:
break
wf.write(content)
# 写入缓冲区时候手动刷新一下,可能会加快写入
wf.flush()
# 读写完成关闭文件
rf.close()
wf.close()
# 传入需要复制的目录和需要复制到的目标目录
sPath = ""
tPath = ""
copyDir(sPath,tPath)
递归遍历:
递归思路:
1.定义一个函数来复制目录,需要传入原目录和目标目录
2.判断源目录是否是一个目录--不是就终止
3.判断目标目录是否存在--不存在,新建
4.遍历源目录,
import os
def copyDir(sourceDir,targetDir):
if not os.path.isdir(sourceDir):
return "源目录不存在"
if not os.path.exists(targetDir):
os.makedirs(targetDir)
listName = os.listdir(sourceDir)
for name in listName:
sourceAbs = os.path.join(sourceDir,name)
targetAbs = os.path.join(targetDir,name)
if os.path.isdir(sourceAbs):
#创建目标目录
if not os.path.exists(targetAbs):
os.makedirs(targetAbs)
copyDir(sourceAbs,targetAbs)
if os.path.isfile(sourceAbs):
# 1.如果目标子级文件不存在 或者 目标子级文件存在但是该文件与原子级文件大小不一致 则需要复制
if (not os.path.exists(targetAbs)) or (os.path.exists(targetAbs) and os.path.getsize(targetAbs) != os.path.getsize(sourceAbs)):
rf = open(sourceAbs,mode="rb")
wf = open(targetAbs,mode="wb")
while True:
content = rf.read(1024*1024*10)
if len(content) == 0:
break
wf.write(content)
wf.flush()
rf.close()
wf.close()
# 测试
sPath = ""
tPath = ""
copyDir(sPath,tPath)
来源:https://blog.csdn.net/weixin_42269099/article/details/80634208
标签:python,目录,复制
0
投稿
猜你喜欢
使用base64对图片的二进制进行编码并用ajax进行显示
2024-05-02 16:18:24
python openCV实现摄像头获取人脸图片
2021-08-16 08:21:03
详解在Python程序中使用Cookie的教程
2021-10-25 17:58:43
安装Mysql时可能会遇到的一些疑难杂症
2024-01-28 13:30:09
Scrapy框架基本命令与settings.py设置
2021-12-03 14:05:47
ASP中SESSION无法保存问题的解决办法
2023-06-27 15:40:12
15条JavaScript最佳实践小结
2024-04-29 13:37:25
使用PYTHON解析Wireshark的PCAP文件方法
2022-12-26 06:04:00
MySQL表排序规则不同错误问题分析
2024-01-25 08:12:30
Python之基础函数案例详解
2023-07-09 19:43:24
PLSQL14下载与安装使用教程
2024-01-16 10:59:48
Python getattr()函数使用方法代码实例
2022-03-04 03:30:51
在Internet Explorer中正确使用MSXML
2009-02-22 18:41:00
Python实现机器学习算法的分类
2023-08-31 05:50:36
javascript双击自动滚屏单击停止
2008-10-13 13:05:00
Python整型运算之布尔型、标准整型、长整型操作示例
2021-01-28 06:39:15
python交互式图形编程实例(三)
2021-10-10 17:34:39
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
2022-04-19 21:35:31
一文教会你在sqlserver中创建表
2024-01-17 11:42:57
如何解决springboot数据库查询时出现的时区差异问题
2024-01-26 01:53:01