日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 复制文件夹校验_Python多任务复制文件夹

發布時間:2023/12/18 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 复制文件夹校验_Python多任务复制文件夹 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

import multiprocessing

import os

import time

def copy_file(queue, file_name, old_folder_name, new_folder_name, count):

"""完成文件的復制"""

# 拼湊包含完整路徑的文件(夾)

# os.path.join 把目錄和文件名合成一個路徑

old_file_name = os.path.join(old_folder_name, file_name)

new_file_name = new_folder_name + "/" + file_name

if os.path.isdir(old_file_name):

os.mkdir(new_folder_name + "/" + file_name)

f_names = os.listdir(old_file_name)

for f_name in f_names:

copy_file(queue, f_name, old_file_name, new_file_name, count)

# 進程池中出錯,沒有顯示

# print("%s復制中...." % file_name)

else:

old_f = open(old_file_name, 'rb')

new_f = open(new_file_name, 'wb')

new_f.write(old_f.read())

old_f.close()

new_f.close()

count[0] += 1

# 如果拷貝完了文件,那么就向隊列中寫入一個消息,表示已經完成

queue.put(file_name)

def get_files_num(top):

"""獲取文件夾及子文件夾的個數"""

file_count = 0

for root, dirs, files in os.walk(top, topdown=False):

for name in files:

file_count += 1

return file_count

def rmdirs(top):

for root, dirs, files in os.walk(top, topdown=False):

# 先刪除文件夾

for name in files:

os.remove(os.path.join(root, name))

# 再刪除空目錄

for name in dirs:

os.rmdir(os.path.join(root, name))

# for循環執行后top就為空目錄

# 如果要刪除將下面的注釋打開

# os.rmdir(top)

def main():

# 1 獲取用戶要copy的文件夾的名字

old_folder_name = input("請輸入要復制的文件夾的名字:")

# 2 創建一個新的文件夾

try:

new_folder_name = old_folder_name + "[副本]"

os.mkdir(new_folder_name)

except:

# os.removedirs(new_folder_name)

# 先刪除目錄

rmdirs(new_folder_name)

# 3 獲取文件夾所有的待copy的文件名字 listdir

file_names = os.listdir(old_folder_name)

# 4 創建進程池

pool = multiprocessing.Pool(5)

# 5 創建隊列 顯示復制的進度

queue = multiprocessing.Manager().Queue()

# 主進程與子進程共享這個List

count = multiprocessing.Manager().list([0])

# 6 向進程池中添加復制文件的任務

for file_name in file_names:

# 復制原文件夾中的文件, 到新文件夾中的文件去

pool.apply_async(copy_file, args=(queue, file_name, old_folder_name, new_folder_name, count))

# copy_file(queue, file_name, old_folder_name, new_folder_name, count)

pool.close()

pool.join()

# count[0] 要等到進程結束才有值

# 所有文件的長度

all_file_num = get_files_num(old_folder_name)

# 復制成功的長度

while True:

# file_name = queue.get()

# print("已經完成復制: %s " % file_name)

# print(queue.qsize())

time.sleep(0.1)

print("復制進度.. %.2f%% " % (queue.qsize() * 100 / all_file_num), end="")

if all_file_num == queue.qsize():

print("")

exit()

# if all_file_num == count[0]:

# print("")

# exit()

if __name__ == "__main__":

main()

這里使用兩種方式來記錄的進度

第一種:使用進程之間的共享變量

count = multiprocessing.Manager().list([0])

第二種:使用隊列的方式來記錄

# 創建隊列

queue = multiprocessing.Manager().Queue()

# 獲取隊列的長度

queue.qsize()

# 入隊列

queue.put()

注: 顯示復制的進度未完善,即使加了延時

總結

以上是生活随笔為你收集整理的python 复制文件夹校验_Python多任务复制文件夹的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。