Python多进程Copy文件

本文介绍了一个Python脚本,用于实现文件夹及其内容的完整备份,并通过多线程加速复制过程。脚本首先检查目标目录的存在性,然后递归地遍历并备份所有文件。此外,还实现了使用多线程进行文件复制的功能,显著提高了备份速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import os
import time

def readAllFiles(dirname):
    """获取指定目录的所有内容;"""
    all_files = []
    # 1. 盘顿目录是否存在?
    if os.path.exists(dirname):
        # 依次遍历目录里面的所有内容;
        for root, dirs, files in os.walk(dirname):
            for file in files:
                # 将文件的路径加入到列表中;
                all_files.append(os.path.join(root, file))

        return all_files
    else:
        print("%s 不存在" % (dirname))

print(readAllFiles('/home/kiosk/Flask_Movie_Site-master'))

在这里插入图片描述

def copyFileTask(oldDir, newDir, file):
    """备份文件和目录"""
    #把字符串中的 old(旧字符串) 替换成 new(新字符串)
    newFile = file.replace(oldDir, newDir)
    #print(newFile)
    # 假设文件所在的目录不存在, 先创建;
    newFileDirName = os.path.dirname(newFile)
    try:
        if not os.path.exists(newFileDirName):
            os.makedirs(newFileDirName)

        fr = open(file, 'rb')
        fw = open(file.replace(oldDir, newDir), 'wb')
        content = fr.read()
        fw.write(content)

        fr.close()
        fw.close()
    except Exception as e:
        print(e)
    else:
        # print("backup %s success" % (file))
        pass
#
#
def main():
    # oldDir = input("请输入备份的目录:")
    oldDir = '/home/kiosk/Flask_Movie_Site-master'
    if os.path.exists(oldDir):
        try:
            date = os.popen('date +%F').read().strip()
            newDir = oldDir + '-backup-' + date
            os.makedirs(newDir)
        except FileExistsError as e:
            print(e)
        else:
            print("备份目录%s已经创建" % (newDir))

        all_back_files = readAllFiles(oldDir)
        for file in all_back_files:
            copyFileTask(oldDir, newDir, file)

        ##多进程copy
        # from concurrent.futures import ThreadPoolExecutor
        # pool = ThreadPoolExecutor(max_workers=4)
        # all_back_files = readAllFiles(oldDir)
        #
        # for file in all_back_files:
        #     pool.submit(copyFileTask, oldDir, newDir, file)

    else:
        print("error!")
if __name__ == '__main__':
    start = time.time()
    main()
    end = time.time()
    print("run %s" % (end - start))

1.非多进程:
在这里插入图片描述
2.多进程:

##多进程copy
        from concurrent.futures import ThreadPoolExecutor
        pool = ThreadPoolExecutor(max_workers=4)
        all_back_files = readAllFiles(oldDir)

        for file in all_back_files:
            pool.submit(copyFileTask, oldDir, newDir, file)

在这里插入图片描述

3.copy好的文件:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值