linux 下python多线程递归复制文件夹及文件夹中的文件


Posted in Python onJanuary 02, 2020

本文是利用python 复制文件夹 刚开始写了一个普通的递归复制文件夹    然后想了想 觉得对io频繁的程序 threading 线程还比较友好  就写了个多线程版本的  最恶心人的地方就是路径  其他都还好吧 

import os
import threading
import multiprocessing
length_of_folder = 0
def copyfile(Path):
if os.path.isdir(Path):
  print("-----------%s" % ("Testfortherading_" + '/' + Path[length_of_folder:]))
  os.makedirs("Testforthreading_" + '/' + Path[length_of_folder:])
filenames = os.listdir(Path)
for filename in filenames:
  if os.path.isdir(Path + '/' + filename):
    #ps = "Testforthreading_" +"/" + Path[length_of_folder:]
    #print("%s" % (ps + '/' + filename))
    #os.mkdir(ps + '/' + filename)
    temp = Path + '/' + filename
    t = threading.Thread(target=copyfile , args=(temp,))
    t.start()
  else:
    f = open(Path + '/' + filename , 'rb')
    content = f.read()
    F = open('Testforthreading_' + '/' + Path[length_of_folder:]+ '/' + filename , 'wb')
    F.write(content)
    f.close()
    F.close()
def main():
""""""
foldername = input("Please input the folder you want to copy:")
length_of_folder = len(foldername)
if os.path.isdir("Testforthreading_"):
  os.removedirs("Testforthreading_")
os.mkdir("Testforthreading_")
copyfile(foldername)
#p = multiprocessing.Pool(10)
#que = multiprocessing.Manager().Queue()
if __name__ == "__main__":
main()

ps:Python多进程递归复制文件夹中的文件

import multiprocessing
import os
import reimport time
# 源文件夹地址、目标文件夹地址
SOUR_PATH = ""
DEST_PATH = ""
# 源文件列表 文件夹列表
SOUR_FILE_LIST = list()
SOUR_DIR_LIST = list()
def traverse(source_path):
  """递归遍历源文件夹,获取文件夹列表、文件列表
  :param source_path: 用户指定的源路径
  """
  if os.path.isdir(source_path):
    SOUR_DIR_LIST.append(source_path)
    for temp in os.listdir(source_path):
      new_source_path = os.path.join(source_path, temp)
      traverse(new_source_path)
  else:
    SOUR_FILE_LIST.append(source_path)
def copy_files(queue, sour_file, dest_file):
  """复制文件列表中的文件到指定文件夹
  :param queue: 队列,用于监测进度
  :param sour_file:
  :param dest_file:
  """
  # time.sleep(0.1)
  try:
    old_f = open(sour_file, "rb")
    new_f = open(dest_file, "wb")
  except Exception as ret:
    print(ret)
  else:
    content = old_f.read()
    new_f.write(content)
    old_f.close()
    new_f.close()
  queue.put(sour_file)
def main():
  source_path = input("请输入需要复制的文件夹的路径:\n")
  SOUR_PATH = source_path
  DEST_PATH = SOUR_PATH + "[副本]"
  # dest_path = input("请输入目标文件夹路径")
  # DEST_PATH = dest_path
  print(">>>源文件夹路径:", SOUR_PATH)
  print(">目标文件夹路径:", DEST_PATH)
  print("开始计算文件...")
  queue = multiprocessing.Manager().Queue()
  po = multiprocessing.Pool(5)
  traverse(source_path)
  print("创建目标文件夹...")
  for sour_dir in SOUR_DIR_LIST:
    dest_dir = sour_dir.replace(SOUR_PATH, DEST_PATH)
    try:
      os.mkdir(dest_dir)
    except Exception as ret:
      print(ret)
    else:
      print("\r目标文件夹 %s 创建成功" % DEST_PATH, end="")
  print()
  print("开始复制文件")
  for sour_file in SOUR_FILE_LIST:
    dest_file = sour_file.replace(SOUR_PATH, DEST_PATH)
    po.apply_async(copy_files, args=(queue, sour_file, dest_file))
  count_file = len(SOUR_FILE_LIST)
  count = 0
  while True:
    q_sour_file = queue.get()
    if q_sour_file in SOUR_FILE_LIST:
      count += 1
    rate = count * 100 / count_file
    print("\r文件复制进度: %.2f%% %s" % (rate, q_sour_file), end="")
    if rate >= 100:
      break
  print()
  ret = re.match(r".*\\([^\\]+)", SOUR_PATH)
  name = ret.group(1)
  print("文件夹 %s 复制完成" % name)
if __name__ == '__main__':
  main()

总结

以上所述是小编给大家介绍的linux 下python多线程递归复制文件夹及文件夹中的文件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
一个检测OpenSSL心脏出血漏洞的Python脚本分享
Apr 10 Python
Python设计模式之代理模式实例
Apr 26 Python
Python中实现两个字典(dict)合并的方法
Sep 23 Python
python统计日志ip访问数的方法
Jul 06 Python
Python中asyncio与aiohttp入门教程
Oct 16 Python
使用python进行广告点击率的预测的实现
Jul 04 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
Jul 11 Python
Django模型修改及数据迁移实现解析
Aug 01 Python
简单了解python filter、map、reduce的区别
Jan 14 Python
Python读取VOC中的xml目标框实例
Mar 10 Python
python各种excel写入方式的速度对比
Nov 10 Python
python中 Flask Web 表单的使用方法
May 20 Python
Pytorch的mean和std调查实例
Jan 02 #Python
pytorch 图像预处理之减去均值,除以方差的实例
Jan 02 #Python
Linux下升级安装python3.8并配置pip及yum的教程
Jan 02 #Python
pytorch实现focal loss的两种方式小结
Jan 02 #Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
Jan 02 #Python
基于torch.where和布尔索引的速度比较
Jan 02 #Python
Python魔法方法 容器部方法详解
Jan 02 #Python
You might like
php adodb介绍
2009/03/19 PHP
php中常用字符串处理代码片段整理
2011/11/07 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
2014/12/16 PHP
PHP页面转UTF-8中文编码乱码的解决办法
2015/10/20 PHP
BOM与DOM的区别分析
2010/10/26 Javascript
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
jQuery之尺寸调整组件的深入解析
2013/06/19 Javascript
一个封装js代码-----展开收起效果示例
2013/07/03 Javascript
不使用ajax实现无刷新提交表单
2014/12/21 Javascript
深入理解JavaScript系列(36):设计模式之中介者模式详解
2015/03/04 Javascript
JavaScript 面向对象与原型
2015/04/10 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
2016/02/18 Javascript
浅谈js对象属性 通过点(.) 和方括号([]) 的不同之处
2016/10/29 Javascript
JavaScript中动态向表格添加数据
2017/01/24 Javascript
jQuery实现图片简单轮播功能示例
2018/08/13 jQuery
一文搞懂ES6中的Map和Set
2019/05/20 Javascript
JS实现网页烟花动画效果
2020/03/10 Javascript
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
2018/09/13 Python
对python中assert、isinstance的用法详解
2019/11/27 Python
Django 限制访问频率的思路详解
2019/12/24 Python
python自动识别文本编码格式代码
2019/12/26 Python
python字典按照value排序方法
2020/12/28 Python
Desigual德国官网:在线购买原创服装
2018/03/27 全球购物
表达自我的市场:Society6
2018/08/01 全球购物
Kipling澳洲官网:购买凯浦林包包
2020/12/17 全球购物
高校毕业生自我鉴定
2013/10/27 职场文书
给朋友的道歉信
2014/01/09 职场文书
文明餐桌行动实施方案
2014/02/19 职场文书
赞美老师的演讲稿
2014/05/22 职场文书
身边的榜样活动方案
2014/08/20 职场文书
出资证明书范本(标准版)
2014/09/24 职场文书
人事文员岗位职责
2015/02/04 职场文书
python 调用js的四种方式
2021/04/11 Python
php png失真的原因及解决办法
2021/10/24 PHP