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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 使用Python实现批量文件的压缩处理

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


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
9天前
|
机器学习/深度学习 存储 算法
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
19天前
|
监控 网络安全 开发者
Python中的Paramiko与FTP文件夹及文件检测技巧
通过使用 Paramiko 和 FTP 库,开发者可以方便地检测远程服务器上的文件和文件夹是否存在。Paramiko 提供了通过 SSH 协议进行远程文件管理的能力,而 `ftplib` 则提供了通过 FTP 协议进行文件传输和管理的功能。通过理解和应用这些工具,您可以更加高效地管理和监控远程服务器上的文件系统。
48 20
|
25天前
|
存储 数据采集 数据处理
如何在Python中高效地读写大型文件?
大家好,我是V哥。上一篇介绍了Python文件读写操作,今天聊聊如何高效处理大型文件。主要方法包括:逐行读取、分块读取、内存映射(mmap)、pandas分块处理CSV、numpy处理二进制文件、itertools迭代处理及linecache逐行读取。这些方法能有效节省内存,提升效率。关注威哥爱编程,学习更多Python技巧。
|
26天前
|
存储 JSON 对象存储
如何使用 Python 进行文件读写操作?
大家好,我是V哥。本文介绍Python中文件读写操作的方法,包括文件读取、写入、追加、二进制模式、JSON、CSV和Pandas模块的使用,以及对象序列化与反序列化。通过这些方法,你可以根据不同的文件类型和需求,灵活选择合适的方式进行操作。希望对正在学习Python的小伙伴们有所帮助。欢迎关注威哥爱编程,全栈路上我们并肩前行。
|
1月前
|
存储 算法 Serverless
剖析文件共享工具背后的Python哈希表算法奥秘
在数字化时代,文件共享工具不可或缺。哈希表算法通过将文件名或哈希值映射到存储位置,实现快速检索与高效管理。Python中的哈希表可用于创建简易文件索引,支持快速插入和查找文件路径。哈希表不仅提升了文件定位速度,还优化了存储管理和多节点数据一致性,确保文件共享工具高效运行,满足多用户并发需求,推动文件共享领域向更高效、便捷的方向发展。
|
2月前
|
计算机视觉 Python
如何使用Python将TS文件转换为MP4
本文介绍了如何使用Python和FFmpeg将TS文件转换为MP4文件。首先需要安装Python和FFmpeg,然后通过`subprocess`模块调用FFmpeg命令,实现文件格式的转换。代码示例展示了具体的操作步骤,包括检查文件存在性、构建FFmpeg命令和执行转换过程。
72 7
|
3月前
|
开发者 Python
Python中__init__.py文件的作用
`__init__.py`文件在Python包管理中扮演着重要角色,通过标识目录为包、初始化包、控制导入行为、支持递归包结构以及定义包的命名空间,`__init__.py`文件为组织和管理Python代码提供了强大支持。理解并正确使用 `__init__.py`文件,可以帮助开发者更好地组织代码,提高代码的可维护性和可读性。
168 2
|
3月前
|
中间件 Docker Python
【Azure Function】FTP上传了Python Function文件后,无法在门户页面加载函数的问题
通过FTP上传Python Function至Azure云后,出现函数列表无法加载的问题。经排查,发现是由于`requirements.txt`中的依赖包未被正确安装。解决方法为:在本地安装依赖包到`.python_packages/lib/site-packages`目录,再将该目录内容上传至云上的`wwwroot`目录,并重启应用。最终成功加载函数列表。
|
4月前
|
Java Python
> python知识点100篇系列(19)-使用python下载文件的几种方式
【10月更文挑战第7天】本文介绍了使用Python下载文件的五种方法,包括使用requests、wget、线程池、urllib3和asyncio模块。每种方法适用于不同的场景,如单文件下载、多文件并发下载等,提供了丰富的选择。
|
4月前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
103 1

热门文章

最新文章