python3多进程写时拷贝_python多进程实现复制文件
[Python] 純文本查看 復制代碼'''
多進程實現(xiàn)復制文件
步驟:
(1)獲得源文件夾路徑;
(2)獲取源文件夾下各文件的文件名
(3)獲得目標文件夾
(4)復制文件(文件夾不能復制)
新增內(nèi)容:
復制一個文件夾下的所有文件
知識點:
(1)os模塊:
1>listdir(path),得到路徑path下的所有文件夾名和文件名。(只有一層)
2>mkdir(path),新建該路徑的文件夾
3>path.isdir(path),該路徑是否為文。是,返回true
4>path.isfile(path), 該路徑是否為文件。 是,返回true。
(2)multiprocess 多進程
1>Pool() 進程池
2>Manger().Queue() 隊列(進程通信)
(3)遞歸實現(xiàn)復制子文件夾下的文件。
2019年10月23日
'''
import multiprocessing
import os
import time
#1得到復制的文件夾名
def get_old_folder_name():
old_folder_name = input("請輸入復制目錄:")
return old_folder_name
#2得到文件夾下的文件名
def get_file_names( folder ):
file_names = os.listdir(folder)
return file_names
#3新建文件夾
def creat_folder(new_folder_name):
try:
os.mkdir(new_folder_name)
except:
pass
return new_folder_name
#4復制文件到指定文件夾下
def copy_file(file_name, old_folder_name, new_folder_name,queue):
try:
#如果是文件,進行復制
if os.path.isfile( old_folder_name+"/"+file_name):
#不知道文件類型,直接使用二進制讀取。
old_f = open(old_folder_name+"/"+file_name, "rb")
read_str = old_f.read()
old_f.close()
new_f = open(new_folder_name +"/" + file_name, "wb")
new_f.write(read_str)
new_f.close()
#如果是文件夾,進行遞歸。 新建文件夾--》獲取子文件夾文件名--》復制文件
if os.path.isdir(old_folder_name+"/"+file_name):
new_folder_name = creat_folder(new_folder_name+"/"+file_name)
old_folder_name = old_folder_name +"/"+file_name
file_names = get_file_names(old_folder_name)
for file_name in file_names :
copy_file(file_name, old_folder_name, new_folder_name, queue)
except:
pass
#避免”復制“文件夾而產(chǎn)生的文件數(shù)量不夠,程序不能結束
queue.put(1)
#time.sleep(1)沒有實際作用,只是為了看進度條的效果
time.sleep(1)
#5主函數(shù)
def main(queue):
old_folder_name = get_old_folder_name()
print("原文件夾: ",old_folder_name)
file_names = get_file_names(old_folder_name)
print("文件數(shù)量: ",len(file_names))
new_folder_name = input("請輸入新的文件夾名:")
new_folder_name = creat_folder( new_folder_name)
print("新文件夾: ",new_folder_name)
for item in file_names :
pool.apply_async(copy_file, (item,old_folder_name,new_folder_name ,queue))
pool.close()
file_num = 0
file_sum = len(file_names)
while True:
if not queue.empty():
queue.get()
file_num+=1
print("\r",end="")
print("▓"*int(file_num/file_sum *50), end="")
print(" 已完成 %.2f%%" % (file_num/file_sum*100), end="")
if file_num == file_sum:
print()
break
print("復制完成!")
#5函數(shù)入口
if __name__ == "__main__":
pool = multiprocessing.Pool(10)
queue = multiprocessing.Manager().Queue()
main(queue)
總結
以上是生活随笔為你收集整理的python3多进程写时拷贝_python多进程实现复制文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AM335 嵌入式 linux,am33
- 下一篇: websocket python爬虫_p