首页Python【Python小程序】自动...

【Python小程序】自动压缩文件

本系列文章配套代码获取有以下两种途径:

  • 通过百度网盘获取:
链接:https://pan.baidu.com/s/1i9F6oV1J5oZnIsOASDs0gQ?pwd=mnsj 提取码:mnsj
  • 前往GitHub获取
https://github.com/returu/Python_mini_program





01

脚本需求


持续监控一个指定目录中的文件,当该目录中的文件数量达到或超过5个时,它会将这些文件压缩到一个以指定前缀和递增数字命名的zip文件中,并删除原始文件。
02

实现步骤


具体实现步骤如下:
  • 持续监控目录:通过while True无限循环实现。
  • 生成压缩文件:通过zipfile模块实现。
  • 删除文件——使用内置模块os来实现。

03

代码实现


代码定义了一个函数monitor_and_zip,它持续监控一个指定目录中的文件。当该目录中的文件数量达到或超过5个时,它会将这些文件压缩到一个以指定前缀和递增数字命名的zip文件中,并删除原始文件。然后,它等待5秒钟,再次检查目录中的文件数量,重复这个过程。通过这种方式,可以自动管理目录中的文件,避免文件过多导致管理困难。
具体代码如下所示:
# 导入os模块,用于文件和目录操作
import os
# 导入zipfile模块,用于创建和操作zip文件
import zipfile
# 导入time模块,用于在循环中引入延时
import time

def monitor_and_zip(directory, output_directory, archive_prefix="archive"):
    """
    监控指定目录中的文件,当文件数量达到或超过5个时,
    将这些文件压缩到一个zip文件中,并删除原文件。
    压缩文件以指定的前缀和递增的数字命名,存储在输出目录中。

    参数:
    directory (str): 要监控的目录路径。
    output_directory (str): 存储压缩文件的输出目录路径。
    archive_prefix (str, 可选): 压缩文件的前缀名,默认为"archive"。
    """
    archive_number = 1  # 初始化压缩文件的编号
    while True:  # 无限循环,持续监控目录
        # 使用列表推导式获取指定目录中的所有文件,排除子目录
        files = [f for f in os.listdir(directory) if os.path.isfile(os.path.join(directory, f))]

        # 如果文件数量达到或超过5个
        if len(files) >= 5:
            # 如果输出目录不存在,则创建它
            if not os.path.exists(output_directory):
                os.makedirs(output_directory)

            # 构建压缩文件的名称
            archive_name = f"{archive_prefix}_{archive_number}.zip"
            zip_path = os.path.join(output_directory, archive_name)

            # 使用with语句创建zip文件,确保文件正确关闭
            with zipfile.ZipFile(zip_path, 'w') as zipf:
                for file in files:
                    file_path = os.path.join(directory, file)
                    # 将文件添加到zip文件中,保持原文件名
                    zipf.write(file_path, arcname=file)
                    # 删除原文件
                    os.remove(file_path)
                    print(f"Deleted {file_path}")  # 打印已删除的文件路径
                # 打印创建的压缩文件路径和包含的文件数量
                print(f"Created archive {zip_path} with {len(files)} files.")

            # 重置文件列表,为下一次循环做准备
            files = []

            # 增加压缩文件的编号,以便下一次压缩时生成不同的文件名
            archive_number += 1

        # 检查用户是否想要停止程序
        # 在每次循环结束后,程序会提示用户输入,如果用户输入'q',则程序会停止并输出提示信息。
        # 如果用户输入任何其他键,程序将继续运行
user_input = input("Press 'q' to quit, any other key to continue: ")  # 等待用户输入
if user_input.lower() == 'q':  # 如果用户输入'q',则停止程序
print("Program stopped by user.")
break  # 退出循环,结束程序

        # 等待5秒,然后再次检查目录中的文件
        time.sleep(5)

# 设置要监控的目录和输出目录的路径
monitor_directory = "./files"  # 监控的目录
output_directory = "./output"  # 存储压缩文件的目录

# 调用monitor_and_zip函数,开始监控和压缩过程
monitor_and_zip(monitor_directory, output_directory)

本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments