python压缩与解压文件

在处理文件时,常常需要对文件进行压缩和解压缩操作,以便节省存储空间或便于传输。Python 提供了多个模块来处理不同格式的压缩文件,其中最常用的是 zipfiletarfile 模块。

1 使用 zipfile 模块

zipfile 模块用于处理 .zip 压缩文件。它可以创建、读取、写入和解压 .zip 文件。让我们从基本的 .zip 文件压缩和解压操作开始。

1.1 创建 .zip 文件

可以使用 zipfile.ZipFile() 方法来创建 .zip 文件,并向其中添加文件。

import zipfile

# 创建一个 zip 文件,并向其中添加文件
with zipfile.ZipFile('example.zip', 'w') as zipf:
    zipf.write('file1.txt')
    zipf.write('file2.txt')

print("压缩完成")

解释:

  • zipfile.ZipFile():创建一个新的 .zip 文件对象。
  • 'w' 模式:表示以写入模式打开 .zip 文件。
  • write():将指定文件添加到 .zip 文件中。
1.2 向现有 .zip 文件中追加文件

如果想向已经存在的 .zip 文件中添加文件,可以使用 'a' 模式(追加模式):

with zipfile.ZipFile('example.zip', 'a') as zipf:
    zipf.write('file3.txt')

print("文件已追加到压缩包")
1.3 解压 .zip 文件

使用 extractall() 方法可以将 .zip 文件中的所有内容解压缩到指定目录。

# 解压文件到指定目录
with zipfile.ZipFile('example.zip', 'r') as zipf:
    zipf.extractall('extracted_files')

print("文件已解压")

解释:

  • 'r' 模式:表示以只读模式打开 .zip 文件。
  • extractall():将 .zip 文件中的所有文件解压缩到指定目录。
1.4 列出 .zip 文件中的文件

要查看 .zip 文件中包含的文件,可以使用 namelist() 方法。

# 列出 zip 文件中的所有文件
with zipfile.ZipFile('example.zip', 'r') as zipf:
    file_list = zipf.namelist()
    print("压缩包中的文件:", file_list)

2 使用 tarfile 模块

tarfile 模块用于处理 .tar.tar.gz 等格式的压缩文件。它的使用方式与 zipfile 类似,支持创建、读取和解压缩 tar 文件。

2.1 创建 .tar 文件

要创建 .tar 文件,并向其中添加文件,可以使用 tarfile.open() 方法。

import tarfile

# 创建 tar 文件并添加文件
with tarfile.open('example.tar', 'w') as tarf:
    tarf.add('file1.txt')
    tarf.add('file2.txt')

print("tar 文件创建完成")

解释:

  • tarfile.open():用于创建或打开一个 tar 文件。
  • 'w' 模式:表示以写入模式创建 tar 文件。
  • add():将文件添加到 tar 文件中。
2.2 创建 .tar.gz 文件

如果想要创建一个 .tar.gz 文件,可以使用 'w:gz' 模式,这会对 .tar 文件进行 gzip 压缩。

# 创建 tar.gz 文件
with tarfile.open('example.tar.gz', 'w:gz') as tarf:
    tarf.add('file1.txt')
    tarf.add('file2.txt')

print("tar.gz 文件创建完成")

解释:

  • 'w:gz' 模式:表示创建一个 .tar 文件并使用 gzip 压缩。
2.3 解压 .tar 文件

.zip 文件类似,tarfile 模块也提供了解压文件的方法,可以使用 extractall() 来解压 .tar 文件。

# 解压 tar 文件
with tarfile.open('example.tar', 'r') as tarf:
    tarf.extractall('extracted_tar_files')

print("tar 文件解压完成")
2.4 解压 .tar.gz 文件

解压 .tar.gz 文件与解压 .tar 文件类似,只需将打开模式设为 'r:gz'

# 解压 tar.gz 文件
with tarfile.open('example.tar.gz', 'r:gz') as tarf:
    tarf.extractall('extracted_tar_gz_files')

print("tar.gz 文件解压完成")
2.5 列出 .tar 文件中的内容

使用 getnames() 方法可以列出 tar 文件中的所有文件。

# 列出 tar 文件中的文件
with tarfile.open('example.tar', 'r') as tarf:
    file_list = tarf.getnames()
    print("tar 文件中的文件:", file_list)

3 使用 shutil 模块进行高层次文件压缩

shutil 模块提供了 make_archive() 方法,能够快速创建 .zip.tar 格式的压缩文件。它封装了底层的压缩逻辑,使用起来非常方便。

3.1 创建 .zip 压缩文件
import shutil

# 创建 zip 压缩文件
shutil.make_archive('archive', 'zip', 'folder_to_compress')

print("文件夹已压缩为 zip 文件")
3.2 创建 .tar.gz 压缩文件
# 创建 tar.gz 压缩文件
shutil.make_archive('archive', 'gztar', 'folder_to_compress')

print("文件夹已压缩为 tar.gz 文件")

4 选择合适的压缩格式

在选择压缩文件格式时,可以根据具体需求进行选择:

  • .zip 格式:广泛使用,特别适合需要在多平台间进行文件传输的场景。压缩速度较快,支持部分文件压缩,但压缩率相对较低。
  • .tar.gz 格式:压缩率较高,适合大文件的压缩和传输,常用于 Unix/Linux 系统。压缩速度较慢,但能更有效地减少文件大小。

5 实际应用场景

文件压缩与解压操作在数据备份、传输、存档等场景中非常常见。以下是一些常见的应用场景:

1 备份文件和目录

定期备份文件或目录是一项常见的自动化任务,尤其是对于重要数据,使用压缩可以节省存储空间。

import shutil

# 备份文件夹并压缩为 zip 文件
shutil.make_archive('backup', 'zip', 'data_folder')

print("数据已备份并压缩")
2 文件解压并自动处理

在某些场景中,自动化脚本会从网络上下载压缩包文件,解压后处理其中的数据。例如,处理定期更新的日志或报告文件。

import zipfile

# 解压 zip 文件并处理其中的文件
with zipfile.ZipFile('data.zip', 'r') as zipf:
    zipf.extractall('extracted_data')

    # 处理解压后的文件
    for file in zipf.namelist():
        print(f"处理文件: {
      
      file}")
        # 在这里可以对文件进行进一步的操作,如分析数据

猜你喜欢

转载自blog.csdn.net/imdeity/article/details/142453949
今日推荐