20 天学 Python 文件操作:Day 8 压缩与解压文件

liftword2个月前 (03-03)技术文章17

在日常开发中,压缩和解压文件是处理文件操作的常见需求。Python 提供了丰富的内置模块,比如 zipfile 和 shutil,让我们能够高效地压缩和解压文件。今天我们将学习如何使用这些模块进行操作。


1. 使用 zipfile 模块压缩文件

zipfile 模块是 Python 标准库的一部分,用于创建和读取 ZIP 格式的文件。

压缩单个文件

import zipfile

def compress_file(file_path, zip_path):
    with zipfile.ZipFile(zip_path, 'w') as zipf:
        zipf.write(file_path, arcname=file_path.split('/')[-1])
    print(f"文件 {file_path} 已压缩到 {zip_path}")

# 示例
compress_file("example.txt", "example.zip")

压缩多个文件

def compress_files(file_paths, zip_path):
    with zipfile.ZipFile(zip_path, 'w') as zipf:
        for file_path in file_paths:
            zipf.write(file_path, arcname=file_path.split('/')[-1])
    print(f"文件 {file_paths} 已压缩到 {zip_path}")

# 示例
compress_files(["example1.txt", "example2.txt"], "examples.zip")

2. 使用 zipfile 模块解压文件

解压 ZIP 文件同样简单。

解压到指定目录

def decompress_file(zip_path, extract_dir):
    with zipfile.ZipFile(zip_path, 'r') as zipf:
        zipf.extractall(extract_dir)
    print(f"文件 {zip_path} 已解压到 {extract_dir}")

# 示例
decompress_file("example.zip", "extracted")

列出压缩文件的内容

def list_zip_contents(zip_path):
    with zipfile.ZipFile(zip_path, 'r') as zipf:
        print("压缩文件内容:")
        print(zipf.namelist())

# 示例
list_zip_contents("example.zip")

3. 使用 shutil 模块压缩文件夹

shutil 模块提供了更高层次的压缩功能,支持多种压缩格式。

压缩整个文件夹为 ZIP 文件

import shutil

def compress_folder(folder_path, zip_path):
    shutil.make_archive(zip_path, 'zip', folder_path)
    print(f"文件夹 {folder_path} 已压缩到 {zip_path}.zip")

# 示例
compress_folder("example_folder", "example_folder_compressed")

注意:此方法会压缩文件夹及其所有子目录。

解压文件夹

使用 shutil 解压需要搭配 unpack_archive。

def decompress_folder(zip_path, extract_dir):
    shutil.unpack_archive(zip_path, extract_dir)
    print(f"文件 {zip_path} 已解压到 {extract_dir}")

# 示例
decompress_folder("example_folder_compressed.zip", "decompressed_folder")

4. 练习任务

  1. 编写一个函数 create_backup(zip_path, folder_paths),将多个文件夹压缩到一个 ZIP 文件中。
  2. 编写一个函数 extract_specific_file(zip_path, file_name, extract_dir),从 ZIP 文件中解压特定的文件。

示例代码框架

def create_backup(zip_path, folder_paths):
    with zipfile.ZipFile(zip_path, 'w') as zipf:
        for folder in folder_paths:
            for root, _, files in os.walk(folder):
                for file in files:
                    full_path = os.path.join(root, file)
                    zipf.write(full_path, arcname=os.path.relpath(full_path, folder))

def extract_specific_file(zip_path, file_name, extract_dir):
    with zipfile.ZipFile(zip_path, 'r') as zipf:
        if file_name in zipf.namelist():
            zipf.extract(file_name, extract_dir)
            print(f"文件 {file_name} 已解压到 {extract_dir}")
        else:
            print(f"文件 {file_name} 不在 {zip_path} 中")

通过今天的学习,你已经掌握了如何使用 Python 处理压缩和解压操作。明天我们将学习更高级的文件读写操作技巧,敬请期待!

相关文章

20 天学 Python 文件操作:Day 16 文件压缩与解压

在日常工作中,我们经常需要对文件进行压缩和解压操作以减少存储空间或方便文件传输。今天,我们将学习如何使用 Python 进行文件的压缩与解压。1. 使用 zipfile 模块进行 ZIP 文件操作创建...

小明用Python暴力破解压缩文件zip密码,省了250块钱

那天晚上小明和你一样在某个小网站上搜寻某些私密的学习资料突然看到论坛有人提供了一个非常牛逼的资源小明怀着激动的心情下载了下来他怀着激动的心情打开了这个压缩文件看到就只有这么一个 txt 小明就是一顿双...

Python 实现图片大小压缩

起因截图组件配合验证码使用优化建议既然没人帮忙解决只能自己动手了小白先直接献上代码from PIL import Imageimport osdef compress_image(infile, ou...

Python 简单的解压缩算法

line = input().strip() need_ch = [] for i in range(len(line)): if line[i].isalpha(): if...

Python 视频处理与特效:高效实现编辑与压缩

现如今各种短视频,特效已经火的可谓“一塌糊涂”,那我们今天就来聊聊用python语言来处理视频与特效。Python 提供了强大的库,如 FFmpeg 和 MoviePy,可用于处理、编辑、压缩和添加视...