一、知识点巩固:
如果想要知道python中存放模块的路径时,就可以打开ipython import os 然后 os.__file__即可查看
二、正文
确定不含任何东西的文件夹拷贝成功
- 得到对方要复制的文件夹的名字
- 创建文件名为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()
~
成功!
注意目录结构