当前位置: 技术文章>> 如何用 Python 实现文件压缩和解压缩?

文章标题:如何用 Python 实现文件压缩和解压缩?
  • 文章分类: 后端
  • 6116 阅读
在Python中实现文件压缩与解压缩,是处理大数据和优化存储空间的常用手段。Python提供了多种库来支持这一功能,其中最为常用的是`zlib`、`gzip`、`bz2`、`zipfile`以及第三方库如`rarfile`(针对RAR格式,尽管不是Python标准库)和`pyzipper`(支持AES加密的zip文件)。这里,我们将重点介绍`gzip`和`zipfile`两个库的使用,因为它们在处理常见压缩文件时非常高效且易于使用。 ### 使用gzip进行文件压缩与解压缩 `gzip`是Python标准库之一,主要用于单个文件的压缩和解压缩,生成的压缩文件以`.gz`为后缀。它基于DEFLATE算法,适用于文本文件和二进制文件的压缩。 #### 压缩文件 要使用`gzip`压缩文件,可以打开源文件,然后使用`gzip.open`以写入模式(`'wb'`)打开一个新的压缩文件,并将源文件的内容写入到压缩文件中。 ```python import gzip def gzip_compress(input_filepath, output_filepath): """ 使用gzip压缩文件 :param input_filepath: 源文件路径 :param output_filepath: 压缩后文件路径 """ with open(input_filepath, 'rb') as f_in: with gzip.open(output_filepath, 'wb') as f_out: f_out.writelines(f_in) # 示例用法 gzip_compress('example.txt', 'example.txt.gz') ``` #### 解压缩文件 解压缩过程与压缩类似,但方向相反。使用`gzip.open`以读取模式(`'rb'`)打开压缩文件,并读取其内容,然后可以将这些内容写入到一个新的未压缩文件中。 ```python def gzip_decompress(input_filepath, output_filepath): """ 使用gzip解压缩文件 :param input_filepath: 压缩文件路径 :param output_filepath: 解压缩后文件路径 """ with gzip.open(input_filepath, 'rb') as f_in: with open(output_filepath, 'wb') as f_out: f_out.writelines(f_in) # 示例用法 gzip_decompress('example.txt.gz', 'example_decompressed.txt') ``` ### 使用zipfile进行文件压缩与文件夹压缩 `zipfile`库提供了对ZIP归档文件的读写支持,它既可以用来压缩单个文件,也可以用来将整个文件夹及其内容压缩成一个ZIP文件。 #### 压缩文件或文件夹 要压缩文件或文件夹,首先需要将想要压缩的项(文件或文件夹路径)列出来,然后使用`zipfile.ZipFile`以写入模式(`'w'`)打开一个新的ZIP文件,并将这些项添加到ZIP归档中。 ```python import zipfile import os def zip_files(file_or_folder_paths, zip_output_path): """ 将文件或文件夹压缩为ZIP文件 :param file_or_folder_paths: 要压缩的文件或文件夹路径列表 :param zip_output_path: 输出的ZIP文件路径 """ with zipfile.ZipFile(zip_output_path, 'w', zipfile.ZIP_DEFLATED) as zipf: for path in file_or_folder_paths: if os.path.isdir(path): for root, dirs, files in os.walk(path): for file in files: zipf.write(os.path.join(root, file), arcname=os.path.relpath(os.path.join(root, file), os.path.commonprefix((root, path)))) else: zipf.write(path, arcname=os.path.basename(path)) # 示例用法 zip_files(['folder_to_compress', 'example.txt'], 'output.zip') ``` 注意:在压缩文件夹时,`os.walk`用于遍历文件夹中的所有文件和子文件夹,`zipf.write`的第二个参数`arcname`用于指定压缩包中的文件名,确保文件在ZIP归档中保持正确的结构。 #### 解压ZIP文件 解压ZIP文件相对简单,只需使用`zipfile.ZipFile`以读取模式(`'r'`)打开ZIP文件,然后使用`extractall`或`extract`方法解压。 ```python def unzip_file(zip_filepath, extract_to_path): """ 解压ZIP文件到指定目录 :param zip_filepath: ZIP文件路径 :param extract_to_path: 解压到的目标目录 """ with zipfile.ZipFile(zip_filepath, 'r') as zip_ref: zip_ref.extractall(extract_to_path) # 示例用法 unzip_file('output.zip', 'extracted_files') ``` ### 注意事项 - 在处理大文件或大量文件时,注意内存和磁盘空间的使用情况。 - 压缩和解压缩过程中可能会遇到文件权限问题,确保程序有足够的权限访问和操作这些文件。 - 对于涉及敏感信息的文件,考虑使用加密压缩方式(如`pyzipper`支持的AES加密ZIP文件)。 ### 码小课网站相关 在`码小课`网站上,我们提供了丰富的Python编程教程,包括但不限于文件处理、数据压缩与解压缩等主题。我们致力于通过深入浅出的讲解和丰富的实例代码,帮助编程爱好者及专业人士快速掌握Python编程技能。无论你是初学者还是有一定基础的进阶者,都能在`码小课`找到适合自己的学习资源。欢迎访问我们的网站,开启你的Python编程之旅!
推荐文章