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标准库之多进程(multiprocessing包)介绍
Nov 25 Python
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
Aug 18 Python
python中利用h5py模块读取h5文件中的主键方法
Jun 05 Python
python 美化输出信息的实例
Oct 15 Python
python numpy元素的区间查找方法
Nov 14 Python
python安装requests库的实例代码
Jun 25 Python
Python函数中参数是传递值还是引用详解
Jul 02 Python
Python如何筛选序列中的元素的方法实现
Jul 15 Python
Python openpyxl读取单元格字体颜色过程解析
Sep 03 Python
python如何实现单链表的反转
Feb 10 Python
matlab中imadjust函数的作用及应用举例
Feb 27 Python
两行代码解决Jupyter Notebook中文不能显示的问题
Apr 24 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查询ip所在地的方法
2014/12/05 PHP
php实现修改新闻时删除图片的方法
2015/05/12 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
基于PHP实现用户注册登录功能
2016/10/14 PHP
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
JavaScript 嵌套函数指向this对象错误的解决方法
2010/03/15 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
BootStrap注意事项小结(五)表单
2017/03/10 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
2017/05/25 Javascript
详解React中的组件通信问题
2017/07/31 Javascript
angularjs1.5 组件内用函数向外传值的实例
2018/09/30 Javascript
vue-cli 目录结构详细讲解总结
2019/01/15 Javascript
js字符串处理之绝妙的代码
2019/04/05 Javascript
解决vue项目运行npm run serve报错的问题
2020/10/26 Javascript
JS实现购物车基本功能
2020/11/08 Javascript
[01:10:57]Liquid vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
利用Python的装饰器解决Bottle框架中用户验证问题
2015/04/24 Python
numpy concatenate数组拼接方法示例介绍
2019/05/27 Python
python基于socket进行端口转发实现后门隐藏的示例
2019/07/25 Python
tensorflow之读取jpg图像长和宽实例
2020/06/18 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
2020/09/23 Python
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
京东奢侈品:全球奢侈品牌
2018/03/17 全球购物
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
绿色城市实施方案
2014/03/19 职场文书
股东协议书
2014/04/14 职场文书
售房协议书
2014/08/19 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
后备干部推荐材料
2014/12/24 职场文书
2019个人工作自我评价范文(3篇)
2019/09/19 职场文书
图解上海144收音机
2021/04/22 无线电
如何使用vue3打造一个物料库
2021/05/08 Vue.js
python3+PyQt5+Qt Designer实现界面可视化
2021/06/10 Python
分享node.js实现简单登录注册的具体代码
2022/04/26 NodeJs