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 相关文章推荐
Python之eval()函数危险性浅析
Jul 03 Python
Python中无限元素列表的实现方法
Aug 18 Python
利用Django框架中select_related和prefetch_related函数对数据库查询优化
Apr 01 Python
Python实现模拟浏览器请求及会话保持操作示例
Jul 30 Python
对Python 除法负数取商的取整方式详解
Dec 12 Python
python 中xpath爬虫实例详解
Aug 26 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
Sep 07 Python
python 表格打印代码实例解析
Oct 12 Python
python 利用turtle模块画出没有角的方格
Nov 23 Python
Python高级特性——详解多维数组切片(Slice)
Nov 26 Python
python实现坦克大战
Apr 24 Python
使用opencv-python如何打开USB或者笔记本前置摄像头
Jun 21 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
文件上传类
2006/10/09 PHP
《PHP编程最快明白》第六讲:Mysql数据库操作
2010/11/01 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
PHP实现一个按钮点击上传多个图片操作示例
2020/01/23 PHP
JQuery 表格操作(交替显示、拖动表格行、选择行等)
2009/07/29 Javascript
Jquery cookie操作代码
2010/03/14 Javascript
JS过滤url参数特殊字符的实现方法
2013/12/24 Javascript
jQuery获取页面元素绝对与相对位置的方法
2015/06/10 Javascript
RequireJS简易绘图程序开发
2016/10/28 Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
2016/12/11 Javascript
jQuery实现百度登录框的动态切换效果
2017/04/21 jQuery
JS简单实现数组去重的方法分析
2017/10/14 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
2018/09/27 Javascript
深入理解JavaScript 中的执行上下文和执行栈
2018/10/23 Javascript
详解微信小程序获取当前时间及日期的方法
2019/04/28 Javascript
微信小程序实现下拉刷新动画
2019/06/21 Javascript
原生JS无缝滑动轮播图
2019/10/22 Javascript
python使用rabbitmq实现网络爬虫示例
2014/02/20 Python
python django 实现验证码的功能实例代码
2017/05/18 Python
python中使用正则表达式的连接符示例代码
2017/10/10 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
2018/01/27 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
2019/03/18 Python
Python3常用内置方法代码实例
2019/11/18 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
2020/05/15 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
2020/11/18 Python
女装和独特珠宝:Sundance Catalog
2018/09/19 全球购物
新西兰网上购物,折扣店:BestDeals.co.nz
2019/03/20 全球购物
高一化学教学反思
2014/02/05 职场文书
表演方阵解说词
2014/02/08 职场文书
产品质量承诺书
2014/03/27 职场文书
《山谷中的谜底》教学反思
2014/04/26 职场文书
2014年政风行风工作总结
2014/11/22 职场文书
工程部部长岗位职责
2015/02/12 职场文书
幼儿园教学工作总结2015
2015/05/12 职场文书
2019优秀干部竞聘演讲稿范文!
2019/07/02 职场文书
django上传文件的三种方式
2021/04/29 Python