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 相关文章推荐
Pyramid Mako模板引入helper对象的步骤方法
Nov 27 Python
python中的yield使用方法
Feb 11 Python
Python break语句详解
Mar 11 Python
Python检测一个对象是否为字符串类的方法
May 21 Python
python+selenium+autoit实现文件上传功能
Aug 23 Python
Python/Django后端使用PIL Image生成头像缩略图
Apr 30 Python
python logging模块书写日志以及日志分割详解
Jul 22 Python
python实现windows倒计时锁屏功能
Jul 30 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
Aug 12 Python
零基础小白多久能学会python
Jun 22 Python
MoviePy简介及Python视频剪辑自动化
Dec 18 Python
详解Python遍历列表时删除元素的正确做法
Jan 07 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
在html页面中包含共享页面的方法
2008/10/24 Javascript
JavaScript页面刷新与弹出窗口问题的解决方法
2010/03/02 Javascript
javascript jscroll模拟html元素滚动条
2012/12/18 Javascript
jquery.validate的使用说明介绍
2013/11/12 Javascript
js实现文本框中焦点在最后位置
2014/03/04 Javascript
jQuery中的read和JavaScript中的onload函数的区别
2014/08/27 Javascript
jQuery实现统计复选框选中数量
2014/11/24 Javascript
学习Bootstrap滚动监听 附调用方法
2016/07/02 Javascript
完美JQuery图片切换效果的简单实现
2016/07/21 Javascript
javascript实现瀑布流动态加载图片原理
2016/08/12 Javascript
JavaScript页面实时显示当前时间实例代码
2016/10/23 Javascript
Vue-resource实现ajax请求和跨域请求示例
2017/02/23 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
图文讲解vue的v-if使用方法
2019/02/11 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
Express 配置HTML页面访问的实现
2020/11/01 Javascript
django1.8使用表单上传文件的实现方法
2016/11/04 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
2019/01/24 Python
使用Python控制摄像头拍照并发邮件
2019/04/23 Python
详解python中的生成器、迭代器、闭包、装饰器
2019/08/22 Python
如何运行带参数的python脚本
2019/11/15 Python
详解opencv中画圆circle函数和椭圆ellipse函数
2019/12/27 Python
快速解释如何使用pandas的inplace参数的使用
2020/07/23 Python
CSS3教程(2):网页边框半径和网页圆角
2009/04/02 HTML / CSS
利用CSS3参考手册和CSS3代码生成工具加速来学习网页制
2012/07/11 HTML / CSS
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
俄罗斯首家面向中国消费者的一站式购物网站:Wruru
2020/05/08 全球购物
如何防止同一个帐户被多人同时登录
2013/08/01 面试题
教师自我鉴定范文
2013/11/10 职场文书
技术经理的自我评价范文
2013/12/03 职场文书
分家协议书
2014/04/21 职场文书
大学生村官个人对照检查材料(群众路线)
2014/09/26 职场文书
2014年材料员工作总结
2014/11/19 职场文书
2014年管理工作总结
2014/11/22 职场文书
租赁协议书
2015/01/27 职场文书
总经理检讨书范文
2015/02/16 职场文书