程序5 案例 資料夾copy器(多程序版)

2021-09-12 03:43:17 字數 3512 閱讀 3342

拷貝1個檔案,我們前面實現過。

過程是:開啟檔案讀出資料data儲存,

然後開啟另外乙個檔案寫入資料data

就完成了乙個檔案的拷貝。

首先拷貝乙個資料夾,有未知檔案數。

所以用多工拷貝,程序池迴圈來拷貝

匯入模組os,multiprocessing

第一步:獲取要拷貝的資料夾名字

第二步:獲取資料夾中所有要複製的檔案名字

第三步:建立乙個新的資料夾

第四步:建立程序池

第五步:建立佇列

第六步:向程序池中新增複製檔案的任務

第七步:複製完從佇列中依次輸出

os用來提取資料夾中所有檔名,mutiprocessing用來建立程序池,佇列

import os

import multiprocessing

old_folder_name =

input

("請輸入要copy的資料夾的名字:"

)

file_names = os.listdir(old_folder_name)
建立乙個新的資料夾,如果有就不建立

try

: new_folder_name = old_folder_name +

"[附件]"

os.mkdir(new_folder_name)

except

:pass

其中的程序完成複製的任務

po = multiprocessing.pool(

5)

佇列通訊完成主程序顯示進度

q = multiprocessing.manager(

).queue(

)

for file_name in file_names:

(q,file_name,old_folder_name,new_folder_name)

)

count =

0all_number =

len(file_names)

while

true

:if count

file_name = q.get(

) count +=

1print

("已經完成了%.2f %%"

%(count*

100/all_number)

)else

:break

把此方法調入到程序池中進行

def

copy_file

(q,file_name,old_folder_name,new_folder_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)

總**:

import os

import multiprocessing

defcopy_file

(q,file_name,old_folder_name,new_folder_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)

defmain()

:# 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)

# 4.建立程序池 主要負責複製檔案

po = multiprocessing.pool(5)

# 5.建立乙個佇列

q = multiprocessing.manager(

).queue(

)# 6.向程序池中新增copy檔案的任務

for file_name in file_names:

(q,file_name,old_folder_name,new_folder_name)

) po.close(

) count =

0 all_number =

len(file_names)

while

true

:if count

file_name = q.get(

) count +=

1print

("已經完成了%.2f %%"

%(count*

100/all_number)

)else

:break

if __name__ ==

'__main__'

: main(

)

得到的效果:

Python資料夾copy器(多程序版)

import multiprocessing import os import time import random defcopy file queue,file name,source folder name,dest folder name copy檔案到指定的路徑 f read open s...

python資料夾copy器(多程序版)

本節的練習的要求如下 如下 import multiprocessing import os import time import random def copy file q,file name,source folder name,dest folder name 拷貝檔案 print 正在拷貝...

python應用 資料夾copy器(多程序版)

import multiprocessing import os import time import random def copy file queue,file name,source folder name,dest folder name copy檔案到指定的路徑 f read open ...