产品经理经常需要处理压缩文件。而 ZIP 是最常见的压缩文件格式。Python 不仅能帮我们创建、解压这些压缩文件,而且它能帮我们自动化处理各种压缩相关的重复任务,从而能大大节约我们的时间,提高效率,并提升安全性。
Python 提供了内置的 zipfile 库,能够高效地处理 ZIP 文件,包括压缩、解压和读取文件内容,以及设置压缩级别(控制压缩比,平衡文件大小和压缩时间)。
现在我们来看几个示例:
案例 1:创建 ZIP 文件
场景描述:
将多个文件压缩为一个 ZIP 文件。
示例代码如下:
import zipfile
# 创建 ZIP 文件
with zipfile.ZipFile("example.zip", "w") as zipf:
zipf.write("file1.txt") # 添加文件到 ZIP
zipf.write("file2.txt")
print("ZIP 文件已创建:example.zip") 案例 2:解压 ZIP 文件
场景描述:
解压缩文件到指定目录。
示例代码如下:
import zipfile
# 解压 ZIP 文件
with zipfile.ZipFile("example.zip", "r") as zipf:
zipf.extractall("output_dir") # 解压到目录
print("ZIP 文件已解压到 output_dir") 案例 3:读取 ZIP 文件的内容
场景描述:
查看 ZIP 文件中的所有文件。
示例代码如下:
import zipfile
# 查看 ZIP 文件内容
with zipfile.ZipFile("example.zip", "r") as zipf:
file_list = zipf.namelist() # 获取文件列表
print("ZIP 文件包含以下内容:")
for file in file_list:
print(file) 案例 4:使用第三方库
除了 zipfile,使用 shutil 、 patool 、rarfile 等第三方库也可以处理压缩文件,它们支持更多压缩格式如 TAR、GZ 等。
示例:用 shutil 压缩整个文件夹。
示例代码如下(使用 shutil ):
import shutil
# 压缩文件夹为 ZIP 文件
shutil.make_archive("compressed_folder", "zip", "folder_to_compress")
print("文件夹已压缩为 compressed_folder.zip") 综合案例:自动化处理团队上传的用户反馈数据
产品经理从团队接收到一个 ZIP 文件,里面包含多个 CSV 文件。现在我们需要用 Python 来自动解压文件,读取所有 CSV 文件内容,并将数据合并为一个新的 CSV 文件供分析使用。
示例代码如下:
import zipfile
import pandas as pd
import os
# 解压 ZIP 文件
zip_path = "feedback_data.zip"
output_dir = "extracted_data"
with zipfile.ZipFile(zip_path, "r") as zipf:
zipf.extractall(output_dir) # 解压到指定目录
print(f"ZIP 文件已解压到 {output_dir}")
# 初始化一个空的 DataFrame
merged_data = pd.DataFrame()
# 遍历解压后的文件夹
for root, dirs, files in os.walk(output_dir):
for file in files:
if file.endswith(".csv"): # 只处理 CSV 文件
file_path = os.path.join(root, file)
data = pd.read_csv(file_path)
merged_data = pd.concat([merged_data, data]) # 合并数据
# 保存合并后的数据
merged_data.to_csv("merged_feedback.csv", index=False)
print("所有 CSV 文件已合并为 merged_feedback.csv") 练习:
现在请您在综合示例的基础上,修改代码,让其实现:
- 压缩合并后的 CSV 文件:将
merged_feedback.csv再次压缩为 ZIP 文件以便分享。 - 加密压缩文件:研究如何创建带密码保护的 ZIP 文件。
- 批量处理:修改代码,使其能够处理多个 ZIP 文件并自动合并数据。
AI 助教
提示:您可在此提出学习中遇到的问题。回答由 AI 生成,可能存在错误,请注意甄别。
