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从ftp下载数据保存实例
Nov 20 Python
python判断windows隐藏文件的方法
Mar 21 Python
实例说明Python中比较运算符的使用
May 13 Python
python MysqlDb模块安装及其使用详解
Feb 23 Python
对pyqt5多线程正确的开启姿势详解
Jun 14 Python
Python 画出来六维图
Jul 26 Python
Python中类似于jquery的pyquery库用法分析
Dec 02 Python
Python基于QQ邮箱实现SSL发送
Apr 26 Python
Django filter动态过滤与排序实现过程解析
Nov 26 Python
Python实现Excel自动分组合并单元格
Feb 22 Python
python实战之一步一步教你绘制小猪佩奇
Apr 22 Python
如何正确理解python装饰器
Jun 15 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
第一个无线电台是由谁发明的
2021/03/01 无线电
php中通过虚代理实现延迟加载的实现代码
2011/06/10 PHP
php设置编码格式的方法
2013/03/05 PHP
探究Laravel使用env函数读取环境变量为null的问题
2016/12/06 PHP
浅谈php使用curl模拟多线程发送请求
2019/03/08 PHP
Nigma vs AM BO3 第一场2.13
2021/03/10 DOTA
Jquery Ajax学习实例7 Ajax所有过程事件分析示例
2010/03/23 Javascript
javascript中的parseInt和parseFloat区别
2013/07/12 Javascript
js监听滚动条滚动事件使得某个标签内容始终位于同一位置
2014/01/24 Javascript
js限制文本框只能输入数字方法小结
2014/06/16 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
2015/03/24 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
2016/05/17 Javascript
用js实现简单算法的实例代码
2016/09/24 Javascript
jQuery排序插件tableSorter使用方法
2017/02/10 Javascript
javascript 开发之百度地图使用到的js函数整理
2017/05/19 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
2019/09/18 Javascript
vue 移动端记录页面浏览位置的方法
2020/03/11 Javascript
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
Python time模块详解(常用函数实例讲解,非常好)
2014/04/24 Python
python字符串连接方式汇总
2014/08/21 Python
Python动态加载模块的3种方法
2014/11/22 Python
python实现读取excel写入mysql的小工具详解
2017/11/20 Python
python登录并爬取淘宝信息代码示例
2017/12/09 Python
django执行数据库查询之后实现返回的结果集转json
2020/03/31 Python
Python与C/C++的相互调用案例
2021/03/04 Python
丹尼尔惠灵顿手表天猫官方旗舰店:Daniel Wellington
2017/08/25 全球购物
美国二手复古奢侈品包包购物网站:LXRandCo
2019/06/18 全球购物
PHP解析URL是哪个函数?怎么用?
2013/05/09 面试题
教育学专业毕业生的自我鉴定
2013/11/26 职场文书
自我鉴定怎么写
2014/01/12 职场文书
护校行动方案
2014/05/31 职场文书
2014年酒店前台工作总结
2014/11/14 职场文书
2015年小学中秋节活动总结
2015/03/23 职场文书
2016开学第一课心得体会
2016/01/23 职场文书
“鬼灭之刃”热度不减,其成功背后的原因是什么?
2022/03/22 日漫