专业的编程技术博客社区

网站首页 > 博客文章 正文

Python zipfile 和 tarfile 模块详解:读写ZIP和TAR文件

baijin 2024-08-31 16:17:30 博客文章 4 ℃ 0 评论

在日常工作中,我们经常需要处理压缩文件,无论是打包文件还是解压文件。Python标准库中的zipfile和tarfile模块提供了强大的工具来帮助我们处理ZIP和TAR文件。下面我们将详细介绍这两个模块的功能,并通过具体的示例来演示如何使用它们。


zipfile模块

zipfile模块提供了创建、读取、写入、添加和提取ZIP文件的功能。它支持ZIP文件的加密和解密。

创建一个新的ZIP文件

import zipfile
# 创建一个ZIP文件
with zipfile.ZipFile('example.zip', 'w') as zipf:
    zipf.write('example.txt', compress_type=zipfile.ZIP_DEFLATED)
    print("ZIP file created successfully.")

读取ZIP文件的内容

import zipfile
# 打开ZIP文件
with zipfile.ZipFile('example.zip', 'r') as zipf:
    # 打印ZIP文件中的文件列表
    print(zipf.namelist())

解压ZIP文件

import zipfile
# 解压ZIP文件
with zipfile.ZipFile('example.zip', 'r') as zipf:
    zipf.extractall('output')
    print("Files extracted to 'output' directory.")

添加文件到现有的ZIP文件

import zipfile
# 添加文件到ZIP文件
with zipfile.ZipFile('example.zip', 'a') as zipf:
    zipf.write('another_example.txt', compress_type=zipfile.ZIP_DEFLATED)
    print("Another file added to ZIP.")

删除ZIP文件中的文件

import zipfile
import os
# 创建一个临时ZIP文件
with zipfile.ZipFile('temp.zip', 'w') as zipf:
    zipf.write('example.txt')
# 打开ZIP文件并删除文件
with zipfile.ZipFile('temp.zip', 'a') as zipf:
    # 获取ZIP文件中的文件列表
    files_in_zip = zipf.namelist()
    # 删除指定的文件
    for filename in files_in_zip:
        if filename == 'example.txt':
            # 从ZIP文件中删除文件
            # 注意:Python标准库不直接支持从ZIP文件中删除文件,这里只是一个示例
            # 实际操作需要先解压文件,然后重新打包
            zipf.extract(filename)
            os.remove(filename)
            new_zip = zipfile.ZipFile('new_temp.zip', 'w')
            for f in zipf.namelist():
                if f != filename:
                    zipf.extract(f)
                    new_zip.write(f)
                    os.remove(f)
            new_zip.close()
            os.rename('new_temp.zip', 'temp.zip')
            print("File removed from ZIP.")

列出ZIP文件中的文件信息

import zipfile
# 打开ZIP文件
with zipfile.ZipFile('example.zip', 'r') as zipf:
    # 获取ZIP文件中的文件列表
    for info in zipf.infolist():
        print(info.filename, info.date_time, info.file_size)

读取ZIP文件中的文件内容

import zipfile
# 打开ZIP文件
with zipfile.ZipFile('example.zip', 'r') as zipf:
    # 读取文件内容
    with zipf.open('example.txt') as file:
        print(file.read().decode())

创建带密码保护的ZIP文件

import zipfile
# 创建带密码保护的ZIP文件
with zipfile.ZipFile('example_protected.zip', 'w', zipfile.ZIP_DEFLATED) as zipf:
    zipf.setpassword(b'secret')
    zipf.write('example.txt')
    print("Protected ZIP file created.")

读取带密码保护的ZIP文件

import zipfile
# 读取带密码保护的ZIP文件
with zipfile.ZipFile('example_protected.zip', 'r') as zipf:
    try:
        zipf.extractall(pwd=b'secret')
        print("Protected ZIP file read successfully.")
    except RuntimeError as e:
        print(e)


tarfile模块

tarfile模块提供了创建、读取、写入和提取TAR文件的功能。它还支持GZIP和BZIP2压缩。

创建一个新的TAR文件

import tarfile
# 创建一个TAR文件
with tarfile.open('example.tar', 'w') as tarf:
    tarf.add('example.txt')
    print("TAR file created successfully.")

创建一个带GZIP压缩的TAR文件

import tarfile
# 创建一个带GZIP压缩的TAR文件
with tarfile.open('example.tar.gz', 'w:gz') as tarf:
    tarf.add('example.txt')
    print("GZIP-compressed TAR file created.")

创建一个带BZIP2压缩的TAR文件

import tarfile
# 创建一个带BZIP2压缩的TAR文件
with tarfile.open('example.tar.bz2', 'w:bz2') as tarf:
    tarf.add('example.txt')
    print("BZIP2-compressed TAR file created.")

读取TAR文件的内容

import tarfile
# 打开TAR文件
with tarfile.open('example.tar', 'r') as tarf:
    # 打印TAR文件中的文件列表
    print(tarf.getnames())

解压TAR文件

import tarfile
# 解压TAR文件
with tarfile.open('example.tar', 'r') as tarf:
    tarf.extractall('output')
    print("Files extracted to 'output' directory.")

添加文件到现有的TAR文件

import tarfile
# 添加文件到TAR文件
with tarfile.open('example.tar', 'a') as tarf:
    tarf.add('another_example.txt')
    print("Another file added to TAR.")

列出TAR文件中的文件信息

import tarfile
# 打开TAR文件
with tarfile.open('example.tar', 'r') as tarf:
    # 获取TAR文件中的文件列表
    for member in tarf.getmembers():
        print(member.name, member.size, member.mtime)

读取TAR文件中的文件内容

import tarfile
# 打开TAR文件
with tarfile.open('example.tar', 'r') as tarf:
    # 读取文件内容
    with tarf.extractfile('example.txt') as file:
        print(file.read().decode())

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表