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中操作字符串之startswith()方法的使用
May 20 Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
Dec 31 Python
使用Python进行AES加密和解密的示例代码
Feb 02 Python
python数字图像处理之骨架提取与分水岭算法
Apr 27 Python
tensorflow实现简单逻辑回归
Sep 07 Python
django模板加载静态文件的方法步骤
Mar 01 Python
Python爬取破解无线网络wifi密码过程解析
Sep 17 Python
Python 依赖库太多了该如何管理
Nov 08 Python
PyTorch中反卷积的用法详解
Dec 30 Python
详解Django3中直接添加Websockets方式
Feb 12 Python
keras .h5转移动端的.tflite文件实现方式
May 25 Python
Python爬虫UA伪装爬取的实例讲解
Feb 19 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.ini中添加extension=php_mysqli.dll指令的说明
2007/06/14 PHP
PHP 中的批处理的实现
2007/06/14 PHP
将时间以距今多久的形式表示,PHP,js双版本
2012/09/25 PHP
PHP CodeIgniter框架的工作原理研究
2015/03/30 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
js获取页面传来参数的方法
2014/09/06 Javascript
js图片轮播手动切换效果
2015/11/10 Javascript
最全面的百度地图JavaScript离线版开发
2016/09/10 Javascript
js微信支付实现代码
2016/12/22 Javascript
js 性能优化之快速响应的用户界面
2017/02/15 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
JS+CSS实现下拉刷新/上拉加载插件
2017/03/31 Javascript
vue基于Element构建自定义树的示例代码
2017/09/19 Javascript
jqueryUI tab标签页代码分享
2017/10/09 jQuery
Angularjs Promise实例详解
2018/03/15 Javascript
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
vue中使用微信公众号js-sdk踩坑记录
2019/03/29 Javascript
基于Vue实现电商SKU组合算法问题
2019/05/29 Javascript
javascript实现自由编辑图片代码详解
2019/06/21 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
Windows下安装python MySQLdb遇到的问题及解决方法
2017/03/16 Python
TensorFlow在MAC环境下的安装及环境搭建
2017/11/14 Python
python 2.7.13 安装配置方法图文教程
2018/09/18 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
2020/03/10 Python
Matplotlib.pyplot 三维绘图的实现示例
2020/07/28 Python
潘多拉珠宝英国官方网上商店:PANDORA英国
2018/06/12 全球购物
工艺工程师岗位职责
2014/03/04 职场文书
詹天佑教学反思
2014/04/30 职场文书
某某同志考察材料
2014/05/28 职场文书
英文辞职信范文
2015/05/13 职场文书
初一语文教学反思
2016/03/03 职场文书
送给小学生的暑假礼物!小学生必背99首古诗
2019/07/02 职场文书
适合青年人白手起家的创业项目分享
2019/08/16 职场文书
python中sys模块的介绍与实例
2021/04/17 Python