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)