文件夹copy器(显示拷贝进度

一、知识点巩固:

如果想要知道python中存放模块的路径时,就可以打开ipython import os 然后 os.__file__即可查看
在这里插入图片描述

二、正文

确定不含任何东西的文件夹拷贝成功

  1. 得到对方要复制的文件夹的名字
  2. 创建文件名为a+副件的文件夹

import multiprocessing
import os

def main():
        old_file_name = input("请输入要复制的文件夹的名字:")

        os.mkdir( old_file_name + "新")


if __name__ =="__main__":
        main()

把文件夹中的文件名打印出来确定获取文件名

file = os.listdir(old_file_name)
                print(file)

这一步的过程中发现上一次运行的的程序已经复制了文件b如果不删除上一次创建的再次运行就会报错
 try:
                        os.mkdir( old_file_name + "新")
                except:
                        pass

添加了try捕获异常,如若程序发现b文件已经存在就pass这样就不会报错了
在这里插入图片描述
用进程池拷贝文件
3.创建进程池
4.向进程池加入拷贝文件的任务(在进程池打的文件可能看不见)
5.拷贝这个功能为函数来完成
6.测试使用进程池运行函数能否行得通

import multiprocessing
import os

def copy_file(file_name ):
        '''完成文件的复制'''
        print("完成文件的复制:%s" % file_name)
def main():
                old_file_name = input("请输入要复制的文件夹的名字:")
                file_names = os.listdir(old_file_name)

                try:
                        os.mkdir( old_file_name + "新")
                except:
                        pass
                po = multiprocessing.Pool(5)
                for file_name in file_names:
                        po.apply_async(copy_file, args=(file_name,))
                po.close()
                po.join()

if __name__ =="__main__":
        main()
~

但要注意,如果po.close()之前和po.join直接在函数里打印打印结果不显示
进程池里产生异常不会显示异常信息
7.函数行的同后从test(从哪来既文章开始说的a文件)test新(复制到哪里去之前的b文件)文件名叫啥
这三个参数测试是否正常传通

在这里插入图片描述
8.写入文件读写代码

import multiprocessing
import os

def copy_file(file_name,old_file_name,new_file_name ):
                '''完成文件的复制'''
                old_f = open(old_file_name +"/" + file_name ,"rb")
                content = old_f.read()
                old_f.close()

                new_f = open(new_file_name +"/"+ file_name ,"wb")
                new_f.write(content)
                new_f.close()
                print("从%s-->到--------->%s 文件名时:%s" % (old_file_name,new_file_name,file_name))
def main():
                old_file_name = input("请输入要复制的文件夹的名字:")
                file_names = os.listdir(old_file_name)

                try:
                        new_file_name =  old_file_name + "新"
                        os.mkdir(new_file_name)

                except:
                        pass
                po = multiprocessing.Pool(5)
                for file_name in file_names:
                        po.apply_async(copy_file, args=(file_name,old_file_name,new_file_name))
                po.close()
                po.join()

if __name__ =="__main__":
        main()
~

成功!
注意目录结构
在这里插入图片描述

发布了41 篇原创文章 · 获赞 0 · 访问量 430

猜你喜欢

转载自blog.csdn.net/weixin_41621686/article/details/104051589