[开发|python] python定时从一个文件夹中复制文件到另一个文件夹

本文介绍了如何使用Python编写一个脚本,实现在指定时间间隔内从一个文件夹复制文件到另一个文件夹,并在复制完成后打印复制文件的数量及累计总数。
摘要由CSDN通过智能技术生成

python实现定时从一个文件夹中复制文件到另一个文件夹,并打印统计复制的文件数量

# -*- coding: utf-8 -*-
import os
import shutil
import time
from itertools import count

total_copied_count = 0  # 增加全局变量,用于累计复制文件总数
sequence = count(1) # 创建一个计数器,用于生成序号

def copy_files(src_dir, dst_dir):
    """
    复制指定源文件夹下的所有文件到目标文件夹,并返回复制文件数量。
    
    Args:
    src_dir (str): 源文件夹路径
    dst_dir (str): 目标文件夹路径
    
    Returns:
    int: 复制的文件数量
    """
    copied_count = 0
      
    for item in os.listdir(src_dir):
        src_file_path = os.path.join(src_dir, item)
        
        if os.path.isfile(src_file_path):
            base_name, ext = os.path.splitext(item)  # 分离文件名和扩展名
            #python2
            dst_file_base = "{0}_{1}{2}".format(base_name, next(sequence), ext)
            # python3
            # dst_file_base = f"{base_name}_{next(sequence)}{ext}"  # 生成带序号的文件名
            dst_file_path = os.path.join(dst_dir, dst_file_base)
            
            shutil.copy2(src_file_path, dst_file_path)  # 使用copy2保留原文件的元信息
            copied_count += 1
            
    return copied_count


def schedule_copy(src_dir, dst_dir, interval_seconds=60):
    """
    定时执行复制文件操作,并打印复制文件数量(包括本次复制数量和累计总数)。
    
    Args:
    src_dir (str): 源文件夹路径
    dst_dir (str): 目标文件夹路径
    interval_seconds (int, optional): 定时任务间隔秒数,默认为60秒
    """
    global total_copied_count  # 引用全局变量

    while True:
        start_time = time.time()
        copied_count = copy_files(src_dir, dst_dir)
        total_copied_count += copied_count  # 更新累计复制文件总数
        elapsed_time = time.time() - start_time
        
        #python2
        print("复制完成,本次复制 {} 个文件,累计复制 {} 个文件,耗时 {:.2f} 秒.".format(
            copied_count, total_copied_count, elapsed_time))

        # python3
        #print(f"复制完成,本次复制 {copied_count} 个文件,累计复制 {total_copied_count} 个文件,耗时 {elapsed_time:.2f} 秒.")

        time.sleep(interval_seconds - elapsed_time)  # 确保每次实际等待时间为interval_seconds


if __name__ == "__main__":
    src_dir = "/path/to/source/directory"
    dst_dir = "/path/to/destination/directory"
    interval_seconds = 3600  # 设置定时任务间隔为10秒

    schedule_copy(src_dir, dst_dir, interval_seconds) 
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MD5校验码:f4f9ea3f7bcc3375192be61dc110cb58 1、本软件是定时自动备份软件。 2、备份任务自动拷贝文件文件大小或修改时间变化的文件 3、MyCopy.exe是配置界面,该文件生成配置文件mycopy.ini,并能显示系统运行状态。 4、MyCopyTask.exe是执行拷贝任务的程序,它根据mycopy.ini配置的信息定时进行拷贝,在休眠状态下每5秒钟检查一次是否到达任务指定的拷贝时间。拷贝过程出现错误,记录log.ini文件,但不会终止拷贝进程。 5、MyCopy.exe配置界面里有“启动”按钮把运行状态改为“运行”,并启动MyCopyTask.exe程序;“终止”按钮把运行状态改为“终止”,MyCopyTask.exe检测到系统状态时为“终止”则自动退出。“退出”按钮退出配置界面,但不会终止MyCopyTask.exe程序。“暂停”也会推出MyCopyTask.exe程序,但下次启动时,从上次暂停的任务开始继续拷贝。 6、MyCopyTask.exe运行时托盘上会显示图标。 7、要实现拷贝任务的自动启动,可以把MyCopyTask.exe加入到windows系统的“启动”菜单,但配置文件的运行状态一定是“启动”,否则程序会自动退出。 8、程序拷贝文件时意外终止,可以坚持mycopy.ini文件的[系统状态]是否有“半个文件”,如果有说明“运行信息”包含的文件没有拷贝完整。 9、如果因为某种原因错过了任务执行时机的话,拷贝程序会在启动后补回错过的拷贝任务。 10、任务名和文件路径不能出现","(半角逗号) 11、标准版只记录log.ini文件,健康提示版当任务执行完之后会弹出提示信息。
可以使用Python的paramiko库实现在Windows上与Linux机器之间的文件传输。具体步骤如下: 1. 安装paramiko库 可以使用pip命令安装paramiko库,命令为: ``` pip install paramiko ``` 2. 编写脚本 在Windows上编写一个Python脚本,使用paramiko库连接到Linux机器,然后执行文件同步命令。 以下是示例代码: ```python import os import paramiko import time # 定义本地和远程目录 local_path = '/path/to/local/dir' remote_path = '/path/to/remote/dir' # 定义Linux机器的IP地址和登录信息 ip = '192.168.1.100' username = 'username' password = 'password' # 创建SSH客户端 client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(ip, username=username, password=password) # 定义同步函数 def sync_files(): # 获取本地目录下的文件列表 files = os.listdir(local_path) # 遍历本地文件列表,将文件同步到远程目录 for file in files: local_file_path = os.path.join(local_path, file) remote_file_path = os.path.join(remote_path, file) # 判断是否为目录,如果是则递归同步 if os.path.isdir(local_file_path): # 创建远程目录 stdin, stdout, stderr = client.exec_command('mkdir -p ' + remote_file_path) stderr_lines = stderr.readlines() if len(stderr_lines) > 0: print(stderr_lines) # 递归同步子目录 sync_files(local_file_path, remote_file_path) else: # 同步文件 sftp = client.open_sftp() sftp.put(local_file_path, remote_file_path) sftp.close() # 同步文件,每隔5分钟同步一次 while True: sync_files() time.sleep(300) ``` 上述代码,定义了本地目录和远程目录的路径,以及Linux机器的IP地址和登录信息。然后通过paramiko库创建SSH客户端,连接到Linux机器。接着定义了一个同步函数,用于将本地目录下的文件同步到远程目录。在while循环调用同步函数,每隔5分钟同步一次。 3. 运行脚本 在Windows上运行脚本即可实现定时同步文件文件夹至多台Linux机器。可以使用Windows的计划任务功能,或者使用第三方定时任务软件,如cron等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值