python資料夾copy器(多程序版)
阿新 • • 發佈:2018-12-20
本節的練習的要求如下:
- 輸入要拷貝資料夾的檔名稱
- 讀取該資料夾下的所有檔案
- 啟動5個程序來拷貝資料夾,將拷貝成功的檔名稱放入佇列中
- 主程序中顯示檔案拷貝的進度
程式碼如下:
import multiprocessing import os import time import random def copy_file(q, file_name, source_folder_name, dest_folder_name): """拷貝檔案""" # print("正在拷貝檔案:%s,%s ==> %s" % (file_name, source_folder_name, dest_folder_name)) f_read = open(source_folder_name + "/" + file_name, "rb") f_write = open(dest_folder_name + "/" + file_name, "wb") while True: content = f_read.read(1024) if content: f_write.write(content) else: break f_write.close() f_read.close() time.sleep(random.random()) # 放入已經拷貝完成的檔案 q.put(file_name) def main(): # 獲取要複製的資料夾名稱 source_folder_name = input("請輸入要複製的資料夾名稱:") # 目標資料夾 dest_folder_name = source_folder_name + "[副本]" if not os.path.exists(dest_folder_name): os.mkdir(dest_folder_name) # 獲取資料夾中的所有普通檔名 file_names = os.listdir(source_folder_name) # 建立Queue q = multiprocessing.Manager().Queue() # 建立pool po = multiprocessing.Pool(5) for file_name in file_names: po.apply_async(copy_file, args=(q, file_name, source_folder_name, dest_folder_name)) po.close() all_file_num = len(file_names) copy_ok_num = 0 while True: file_name = q.get() 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()