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中的CURL PycURL使用例子
Jun 01 Python
Python实现读取机器硬件信息的方法示例
Jun 09 Python
python 统计数组中元素出现次数并进行排序的实例
Jul 02 Python
Python Django框架单元测试之文件上传测试示例
May 17 Python
python函数与方法的区别总结
Jun 23 Python
解决pandas展示数据输出时列名不能对齐的问题
Nov 18 Python
django执行原始查询sql,并返回Dict字典例子
Apr 01 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
Apr 07 Python
使用anaconda安装pytorch的实现步骤
Sep 03 Python
DRF使用simple JWT身份验证的实现
Jan 14 Python
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
Nov 11 Python
python神经网络 使用Keras构建RNN训练
May 04 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
使用无限生命期Session的方法
2006/10/09 PHP
详解PHP文件的自动加载(autoloading)
2018/02/04 PHP
jQuery EasyUI API 中文文档 - NumberBox数字框
2011/10/13 Javascript
Google Map V3 绑定气泡窗口(infowindow)Dom事件实现代码
2013/04/26 Javascript
Checbox的操作含已选、未选及判断代码
2013/11/07 Javascript
js判断游览器类型及版本号的代码
2014/05/11 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
AngularJs基于角色的前端访问控制的实现
2016/11/07 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
2016/11/26 Javascript
jQuery实现加入收藏夹功能(主流浏览器兼职)
2016/12/24 Javascript
angular.js中解决跨域问题的三种方式
2017/07/12 Javascript
实现单层json按照key字母顺序排序的示例
2017/12/06 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
2019/10/21 Javascript
vuex state中的数组变化监听实例
2019/11/06 Javascript
微信小程序收藏功能的实现代码
2020/06/19 Javascript
[30:37]【全国守擂赛】第三周擂主赛 Dark Knight vs. Leopard Gaming
2020/05/04 DOTA
[47:03]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第二场 12.10
2020/12/13 DOTA
Linux下编译安装MySQL-Python教程
2015/02/02 Python
使用C语言扩展Python程序的简单入门指引
2015/04/14 Python
Python实现SVN的目录周期性备份实例
2015/07/17 Python
神经网络python源码分享
2017/12/15 Python
奥斯汀独木舟和皮划艇:Austin Canoe & Kayak
2018/05/22 全球购物
澳大利亚女士时装在线:Rockmans
2018/09/26 全球购物
美国最大婚纱连锁店运营商:David’s Bridal
2019/03/12 全球购物
琳达·法罗眼镜英国官网:Linda Farrow英国
2021/01/19 全球购物
最受欢迎的自我评价
2013/12/22 职场文书
幼儿园三八妇女节活动方案
2014/03/11 职场文书
《最大的麦穗》教学反思
2014/04/17 职场文书
法学专业求职信
2014/07/15 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
2015年测量员工作总结
2015/05/23 职场文书
如何用python绘制雷达图
2021/04/24 Python
python中pandas对多列进行分组统计的实现
2021/06/18 Python
基于Python编写简易版的天天跑酷游戏的示例代码
2022/03/23 Python
在Python 中将类对象序列化为JSON
2022/04/06 Python
MySQL事务的隔离级别详情
2022/07/15 MySQL