Python文件夹copy器(多进程版)学习笔记
2023-09-27 14:25:49 时间
import os
import multiprocessing
# 程序的读和写没什么难的,不会写了就上网查 最主要的是解决问题的思路
# 找到对应文件里的文件,然后读过来,其次找到要复制目的的文件夹,然后把刚才读进来的
# 文件写到这个文件夹里面就好了
def copy_file(file_name, old_folder_name, new_folder_name):
"""完成文件的复制"""
print("======>模拟copy文件:从%s--->到%s 文件名是:%s" % (old_folder_name, new_folder_name, file_name))
old_f = open(old_folder_name + "/" + file_name, "rb")
content = old_f.read()
old_f.close()
new_f = open(new_folder_name + "/" + file_name, "wb")
new_f.write(content)
new_f.close()
def main():
# 1. 获取用户要copy的文件夹的名字
old_folder_name = input("请输入要copy的文件夹的名字:")
# 2. 创建一个新的文件夹 不存在就创建这个文件夹,如果存在就不创建了保证会有这个文件夹
try:
new_folder_name = old_folder_name + "[复件]"
os.mkdir(new_folder_name) # 创建新的文件夹名子
except:
pass
# 3. 获取文件夹的所有的待copy的文件名字 listdir()
file_names = os.listdir(old_folder_name)
print(file_names)
# 4. 创建进程池
po = multiprocessing.Pool(5)
# 5. 向进程池中添加 copy文件的任务
for file_name in file_names:
po.apply_async(copy_file, args=(file_name, old_folder_name, new_folder_name))
po.close()
po.join()
if __name__ == "__main__":
main()
用到的文件夹默认放在和py原文件 一起
显示当前复制的进度
import os
import multiprocessing
def copy_file(q, file_name, old_folder_name, new_folder_name):
"""完成文件的复制"""
# print("======>模拟copy文件:从%s--->到%s 文件名是:%s" % (old_folder_name, new_folder_name, file_name))
old_f = open(old_folder_name + "/" + file_name, "rb")
content = old_f.read()
old_f.close()
new_f = open(new_folder_name + "/" + file_name, "wb")
new_f.write(content)
new_f.close()
# 如果拷贝完了文件,那么就向队列中写入一个消息,表示已经完成
q.put(file_name)
def main():
# 1. 获取用户要copy的文件夹的名字
old_folder_name = input("请输入要copy的文件夹的名字:")
# 2. 创建一个新的文件夹
try:
new_folder_name = old_folder_name + "[复件]"
os.mkdir(new_folder_name)
except:
pass
# 3. 获取文件夹的所有的待copy的文件名字 listdir()
file_names = os.listdir(old_folder_name)
# print(file_names)
# 4. 创建进程池
po = multiprocessing.Pool(5)
# 5. 创建一个队列
q = multiprocessing.Manager().Queue()
# 6. 向进程池中添加 copy文件的任务
for file_name in file_names:
po.apply_async(copy_file, args=(q, file_name, old_folder_name, new_folder_name))
po.close()
# po.join()
all_file_num = len(file_names) # 测一下所有的文件个数
copy_ok_num = 0
while True:
file_name = q.get()
# print("已经完成copy:%s" % file_name)
copy_ok_num+=1
print("\r拷贝的进度为:%.2f %%" % (copy_ok_num*100/all_file_num), end="")
if copy_ok_num >= all_file_num:
break
print() # 换行
if __name__ == "__main__":
main()
用的quenue和上面的版本不一样
写程序的过程,就是一个调试解决错误的一个过程
最重要是程序的流程图
相关文章
- 【Python从入门到精通】(十八)Python的文件夹操作,创建文件夹复制文件等等
- Python生成exe可执行文件
- python使用token验证,通过api上传图片到图床 EasyImages2.0
- python多线程和多进程
- 【mysql-python】安装+基本使用
- 【Python】求素数-未经过任何优化
- VScode支持Python
- [Python]切换工作目录|python将目录切换为脚本所在目录
- Python 中的线程-进程2
- Python 中的线程-进程1
- Python 比较俩张图片差异
- 进程与线程---Python_Daily
- python小练习15 -- 进程间通信
- Python服务进程管理工具supervisor使用记录
- Python中高级知识(非专题部分)学习随笔
- 第6.5节 exec函数:一个自说自话的强大Python动态编译器
- Python Dateframe列中匹配查找数据(list)添加新列的方法
- python学习笔记(十)——进程间通信
- 在python多进程中使用manager和Barrier
- 练习--python中的Queue与多进程(multiprocessing)
- python多进程--------linux系统中python的os.fork()方法
- python - 进程池 multiprocessing.Pool的简单使用
- python多进程和多线程对于计算密集型任务的耗时对比
- 六、python学习之多任务-进程
- 七、python学习之多任务-协程