使用Python实现批量文件的压缩处理

发布时间:2024年01月16日

目录

步骤1:打开命令行终端

步骤2:创建一个新的Python脚本

步骤3:编辑脚本

步骤4:保存并运行脚本

步骤5:添加密码保护

步骤6:压缩文件选择

步骤7:错误处理和日志记录

步骤8:优化性能

总结


在Python中,我们可以使用zipfile模块来创建和读取ZIP文件。为了批量压缩文件,我们需要遍历某个目录下的所有文件,并将它们添加到一个ZIP文件中。以下是一个简单的示例,演示如何使用Python实现这一目标。

首先,确保你已经安装了Python,并且可以在命令行中运行Python脚本。

步骤1:打开命令行终端

在开始之前,请确保你已经打开了命令行终端(Windows中的命令提示符或Mac中的终端)。

步骤2:创建一个新的Python脚本

在命令行终端中,导航到要创建新Python脚本的目录,然后运行以下命令来创建一个新文件:
touch batch_file_compression.py

步骤3:编辑脚本

使用你喜欢的文本编辑器打开batch_file_compression.py文件,并添加以下代码:

import os ?
import zipfile ?
from datetime import datetime ?
??
def batch_compress_files(directory, output_filename): ?
? ? # 创建ZIP文件对象 ?
? ? with zipfile.ZipFile(output_filename, 'w', zipfile.ZIP_DEFLATED) as zipf: ?
? ? ? ? # 遍历指定目录下的所有文件和子目录 ?
? ? ? ? for root, dirs, files in os.walk(directory): ?
? ? ? ? ? ? for file in files: ?
? ? ? ? ? ? ? ? # 构造文件的完整路径 ?
? ? ? ? ? ? ? ? file_path = os.path.join(root, file) ?
? ? ? ? ? ? ? ? # 将文件添加到ZIP文件中 ?
? ? ? ? ? ? ? ? zipf.write(file_path, arcname=os.path.relpath(file_path, directory)) ?
? ? ? ? print(f"已将目录 {directory} 中的所有文件压缩为 {output_filename}") ?
? ? ? ? print(f"压缩完成时间: {datetime.now()}") ?
??
# 调用函数,指定要压缩的目录和输出ZIP文件的名称 ?
batch_compress_files('path/to/your/directory', 'output_archive.zip')

步骤4:保存并运行脚本

保存文件后,返回命令行终端,并运行以下命令来执行脚本:
python batch_file_compression.py

这个脚本将会遍历指定目录下的所有文件和子目录,并将它们添加到一个ZIP文件中。你可以根据需要修改batch_compress_files函数中的directory和output_filename参数,以适应你的实际情况。这个脚本会生成一个名为"output_archive.zip"的压缩文件,其中包含指定目录下的所有文件和子目录。

步骤5:添加密码保护

为了增加文件的安全性,你可以选择为ZIP文件添加密码保护。可以通过在ZipFile构造函数中添加password参数来实现这一目标。以下是添加密码保护的示例代码:
batch_compress_files('path/to/your/directory', 'output_archive.zip', 'your_password')
在上面的代码中,我们向batch_compress_files函数添加了一个新的参数password,用于设置ZIP文件的密码。

def batch_compress_files(directory, output_filename, password): ?
? ? # 创建ZIP文件对象并设置密码 ?
? ? with zipfile.ZipFile(output_filename, 'w', zipfile.ZIP_DEFLATED, password=password) as zipf: ?
? ? ? ? # 遍历指定目录下的所有文件和子目录 ?
? ? ? ? for root, dirs, files in os.walk(directory): ?
? ? ? ? ? ? for file in files: ?
? ? ? ? ? ? ? ? # 构造文件的完整路径 ?
? ? ? ? ? ? ? ? file_path = os.path.join(root, file) ?
? ? ? ? ? ? ? ? # 将文件添加到ZIP文件中 ?
? ? ? ? ? ? ? ? zipf.write(file_path, arcname=os.path.relpath(file_path, directory)) ?
? ? ? ? print(f"已将目录 {directory} 中的所有文件压缩为 {output_filename}") ?
? ? ? ? print(f"压缩完成时间: {datetime.now()}")

通过添加密码参数,你可以设置一个密码来保护ZIP文件,增加其安全性。

步骤6:压缩文件选择

如果你只想压缩指定的文件,而不是整个目录,你可以修改脚本以选择要压缩的文件。以下是一个示例代码片段,演示如何选择要压缩的文件:

def batch_compress_files(directory, output_filename, file_extensions): ?
? ? # 创建ZIP文件对象 ?
? ? with zipfile.ZipFile(output_filename, 'w', zipfile.ZIP_DEFLATED) as zipf: ?
? ? ? ? # 遍历指定目录下的所有文件和子目录 ?
? ? ? ? for root, dirs, files in os.walk(directory): ?
? ? ? ? ? ? for file in files: ?
? ? ? ? ? ? ? ? # 检查文件扩展名是否匹配指定的扩展名列表 ?
? ? ? ? ? ? ? ? if os.path.splitext(file)[1] in file_extensions: ?
? ? ? ? ? ? ? ? ? ? file_path = os.path.join(root, file) ?
? ? ? ? ? ? ? ? ? ? # 将文件添加到ZIP文件中 ?
? ? ? ? ? ? ? ? ? ? zipf.write(file_path, arcname=os.path.relpath(file_path, directory)) ?
? ? ? ? print(f"已将目录 {directory} 中符合扩展名的文件压缩为 {output_filename}") ?
? ? ? ? print(f"压缩完成时间: {datetime.now()}")

在上面的代码中,我们向batch_compress_files函数添加了一个新的参数file_extensions,它是一个包含要选择的文件扩展名的列表。然后,在脚本中检查文件的扩展名是否在指定的扩展名列表中,如果是,则将其添加到ZIP文件中。你可以根据需要修改file_extensions参数来选择要压缩的文件。通过这种方式,你可以控制要压缩的文件类型,从而只压缩你感兴趣的文件。

步骤7:错误处理和日志记录

在批处理脚本中添加错误处理和日志记录是非常重要的,以便在出现问题时能够提供有关错误的详细信息。以下是一个示例代码片段,演示如何添加错误处理和日志记录:

首先,我们创建一个日志文件来记录脚本的运行情况:

log_file = 'compression.log' ?
with open(log_file, 'w') as log: ?
? ? try: ?
? ? ? ? batch_compress_files('path/to/your/directory', 'output_archive.zip') ?
? ? ? ? log.write('文件压缩成功!\n') ?
? ? except Exception as e: ?
? ? ? ? log.write(f'发生错误:{str(e)}\n')

步骤8:优化性能

在处理大量文件或大型文件时,脚本可能会占用较多的系统资源。为了优化性能,你可以采取以下措施:

  • 使用多线程或异步处理:通过将压缩任务分配给多个线程或异步任务,可以同时处理多个文件,从而提高压缩速度。你可以使用Python的threading或asyncio模块来实现多线程或异步处理。
  • 优化文件访问方式:在遍历目录和读取文件时,可以使用更高效的文件访问方式,如os.scandir()函数代替os.walk()函数。os.scandir()函数返回一个迭代器,可以更快地遍历目录中的文件。
  • 使用更快的压缩算法:根据需要压缩的文件类型和大小,你可以选择使用不同的压缩算法。例如,对于大型文件或图片,可以使用zipfile.ZIP_STORED算法,它比默认的zipfile.ZIP_DEFLATED算法更快。
  • 限制CPU使用率和内存占用:在处理大量文件时,可以通过限制CPU使用率和内存占用,来避免系统资源的过度消耗。你可以使用Python的psutil模块来监控和限制CPU和内存的使用情况。
  • 通过以上措施,你可以优化脚本的性能,使其在处理大量文件或大型文件时更加高效和可靠。

总结

通过以上步骤,你已经了解如何使用Python实现批量文件的压缩处理。通过添加密码保护、选择要压缩的文件、错误处理和日志记录以及优化性能等扩展内容,你可以进一步定制和改进脚本,以满足你的具体需求。希望对你有所帮助!如果你有任何其他问题或需要进一步的帮助,请随时提问。

文章来源:https://blog.csdn.net/weixin_43856625/article/details/135622583
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。