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中if __name__ == "__main__"详细解释
Oct 21 Python
在Python中使用dict和set方法的教程
Apr 27 Python
python单例模式实例解析
Aug 28 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
Apr 26 Python
python之生产者消费者模型实现详解
Jul 27 Python
python实现屏保程序(适用于背单词)
Jul 30 Python
Python使用matplotlib绘制三维参数曲线操作示例
Sep 10 Python
python 消除 futureWarning问题的解决
Dec 25 Python
python如何处理程序无法打开
Jun 16 Python
Python使用grequests并发发送请求的示例
Nov 05 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
Feb 20 Python
python实现会员管理系统
Mar 18 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项目的方法
2006/10/09 PHP
php 图片上传类代码
2009/07/17 PHP
PHP使用数组实现队列
2012/02/05 PHP
浅谈PHP调用Webservice思路及源码分享
2014/06/04 PHP
php+mysqli事务控制实现银行转账实例
2015/01/29 PHP
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
jQuery向下滚动即时加载内容实现的瀑布流效果
2016/01/07 PHP
PHP连接MySQL数据库三种实现方法
2020/12/10 PHP
jQuery中的bind绑定事件与文本框改变事件的临时解决方法
2010/08/13 Javascript
javascript如何动态加载表格与动态添加表格行
2013/11/27 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
JavaScript基础语法之js表达式
2016/06/07 Javascript
javascript设计模式之module(模块)模式
2016/08/19 Javascript
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
2017/03/08 Javascript
AngularJS全局警告框实现方法示例
2017/05/18 Javascript
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
JavaScript时间与时间戳的转换操作实例分析
2018/12/07 Javascript
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
python让图片按照exif信息里的创建时间进行排序的方法
2015/03/16 Python
浅谈Python中重载isinstance继承关系的问题
2018/05/04 Python
基于python批量处理dat文件及科学计算方法详解
2018/05/08 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
Python对CSV、Excel、txt、dat文件的处理
2018/09/18 Python
Django如何简单快速实现PUT、DELETE方法
2019/07/24 Python
在win64上使用bypy进行百度网盘文件上传功能
2020/01/02 Python
python3中布局背景颜色代码分析
2020/12/01 Python
利用Canvas模仿百度贴吧客户端loading小球的方法示例
2017/08/13 HTML / CSS
先进个人事迹材料
2014/01/25 职场文书
学生个人自我鉴定
2014/03/26 职场文书
鉴定评语大全
2014/05/05 职场文书
保卫钓鱼岛口号
2014/06/20 职场文书
团日活动总结报告
2014/06/25 职场文书
JavaScript实现两个数组的交集
2022/03/25 Javascript
java中为什么说子类的构造方法默认访问的是父类的无参构造方法
2022/04/13 Java/Android