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爬虫之HTTP异常处理
Nov 05 Python
Linux 修改Python命令的方法示例
Dec 03 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
Dec 21 Python
python实现合并多个list及合并多个django QuerySet的方法示例
Jun 11 Python
自定义django admin model表单提交的例子
Aug 23 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
Feb 21 Python
Django使用Profile扩展User模块方式
May 14 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
Aug 07 Python
浅谈Python描述数据结构之KMP篇
Sep 06 Python
Python可以用来做什么
Nov 23 Python
Python新建项目自动添加介绍和utf-8编码的方法
Dec 26 Python
用python画城市轮播地图
May 28 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的urlencode()URL编码函数浅析
2011/08/09 PHP
PHP实现手机归属地查询API接口实现代码
2012/08/27 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
2013/06/29 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
web页面数据展示新想法(json)
2010/06/08 Javascript
formValidator3.3的ajaxValidator一些异常分析
2011/07/12 Javascript
js实现图片轮换效果代码
2013/04/16 Javascript
javascript 获取函数形参个数
2014/07/31 Javascript
基于Bootstrap重置输入框内容按钮插件
2016/05/12 Javascript
ionic 3.0+ 项目搭建运行环境的教程
2017/08/09 Javascript
JS实现监控微信小程序的原理
2018/06/15 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
详解微信小程序实现仿微信聊天界面(各种细节处理)
2019/02/17 Javascript
javascript使用链接跨域下载图片
2019/11/01 Javascript
详解小程序如何动态绑定点击的执行方法
2019/11/26 Javascript
微信小程序实现导航栏和内容上下联动功能代码
2020/06/29 Javascript
[02:10]2018DOTA2亚洲邀请赛赛前采访-Liquid
2018/04/03 DOTA
[39:21]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.24
2019/09/10 DOTA
LRUCache的实现原理及利用python实现的方法
2017/11/21 Python
python安装模块如何通过setup.py安装(超简单)
2018/05/05 Python
基于python绘制科赫雪花
2018/06/22 Python
对python 树状嵌套结构的实现思路详解
2019/08/09 Python
Django实现文件上传下载
2019/10/06 Python
基于python判断目录或者文件代码实例
2019/11/29 Python
英国复古和经典球衣网站:Vintage Football Shirts
2018/10/05 全球购物
速卖通欧盟:Aliexpress EU
2020/08/19 全球购物
一些.net面试题
2014/10/06 面试题
安全生产工作汇报
2014/10/28 职场文书
银行竞聘报告范文
2014/11/06 职场文书
业务员岗位职责
2015/02/03 职场文书
教师廉政准则心得体会
2016/01/20 职场文书
pytorch查看网络参数显存占用量等操作
2021/05/12 Python
面试中老生常谈的MySQL问答集锦夯实基础
2022/03/13 MySQL