《【第九篇】文件太大难传输?Python批量压缩/解压,文件秒变小,传输更流畅!》
你的工作生活中,是不是也经常遇到这些令人抓狂的场景?
团队协作分发资料,一个几百MB的文件需要同事挨个下载,不仅效率奇低,还占用大量网络带宽。
上传云盘备份照片,看着进度条龟速前进,仿佛回到拨号上网时代。
面对这些重复且耗时的文件批量压缩和文件解压任务,你是不是也想告别手动压缩,寻找一个更智能、更高效的Python办公自动化解决方案?
今天,我将手把手教你如何打造一个Python文件传输神器,让你:
Python文件压缩: 一键打包,让文件秒变小!
Python文件解压: 快速还原,让文件传输更流畅!
Python一键让你的文件瞬间瘦身并快速还原,从此告别传输难题!
文件“瘦身”利器:Python批量压缩,一键打包,文件秒变小!
处理大文件传输最直接的方法就是文件压缩。Python能帮你把整个文件夹甚至指定文件,快速打包成一个体积更小的.zip压缩包,让你的文件秒变小,传输更流畅!
功能:
批量压缩文件夹: 将整个项目目录及其所有子文件,一键打包成一个zip文件。
智能选择文件: 你甚至可以控制只压缩特定类型的文件。
解决思路: Python内置的zipfile库,就是你的最佳批量打包文件工具,无需安装第三方库,就能实现高效的Python文件压缩。
import os
import zipfile
def compress_folder_to_zip(source_folder_path, output_zip_path, include_file_types=None):
"""
批量压缩指定文件夹及其所有内容到一个zip文件。
这是高效的Python文件压缩方法,实现批量打包文件。
:param source_folder_path: 要压缩的源文件夹路径
:param output_zip_path: 输出zip文件的完整路径 (例如 "project_archive.zip")
:param include_file_types: 可选列表,只压缩指定扩展名的文件 (如 ['.jpg', '.pdf'])
"""
if not os.path.exists(source_folder_path):
print(f"❌ 源文件夹不存在:{source_folder_path}")
return
# 确保输出目录存在
os.makedirs(os.path.dirname(output_zip_path), exist_ok=True)
print(f"🚀 正在压缩文件夹:'{source_folder_path}' 到 '{output_zip_path}'...")
try:
with zipfile.ZipFile(output_zip_path, 'w', zipfile.ZIP_DEFLATED) as zf:
# os.walk() 遍历文件夹及其子文件夹和文件
for root, dirs, files in os.walk(source_folder_path):
# 计算当前文件在zip文件中的相对路径
relative_path = os.path.relpath(root, source_folder_path)
for file in files:
file_path = os.path.join(root, file)
# 检查文件类型是否在需要包含的列表中
if include_file_types and os.path.splitext(file.lower())[1] not in include_file_types:
print(f" ℹ️ 跳过文件(类型不符):{file}")
continue
# 将文件添加到zip文件,使用相对路径作为zip内部路径
zf.write(file_path, os.path.join(relative_path, file))
# 获取压缩前后文件大小,进行直观对比
original_size_bytes = sum(os.path.getsize(os.path.join(r, f)) for r, d, fs in os.walk(source_folder_path) for f in fs)
compressed_size_bytes = os.path.getsize(output_zip_path)
original_size_mb = original_size_bytes / (1024 * 1024)
compressed_size_mb = compressed_size_bytes / (1024 * 1024)
savings_percentage = ((original_size_bytes - compressed_size_bytes) / original_size_bytes) * 100 if original_size_bytes > 0 else 0
print(f"✅ 压缩成功!")
print(f" 原始总大小: {original_size_mb:.2f} MB")
print(f" 压缩后大小: {compressed_size_mb:.2f} MB")
print(f" 节省空间: {savings_percentage:.2f}%")
except Exception as e:
print(f"❌ 压缩失败:{e}")
if __name__ == "__main__":
# --- 请修改为你的实际文件夹路径 ---
source_folder_path = os.path.expanduser("~/Desktop/我的项目资料")
output_zip_path = os.path.expanduser("~/Desktop/项目资料_归档.zip")
# 确保源文件夹存在并有测试文件,可以创建一些子文件夹和文件
os.makedirs(source_folder_path, exist_ok=True)
# 示例:创建一些测试文件用于压缩
with open(os.path.join(source_folder_path, "report.txt"), "w") as f: f.write("Hello World\n" * 5000)
with open(os.path.join(source_folder_path, "image.jpg"), "w") as f: f.write("binary data" * 100000)
os.makedirs(os.path.join(source_folder_path, "subfolder"), exist_ok=True)
with open(os.path.join(source_folder_path, "subfolder", "data.csv"), "w") as f: f.write("1,2,3\n" * 2000)
# 示例1:压缩整个文件夹
print("\n--- 示例1:批量压缩整个文件夹 ---")
compress_folder_to_zip(source_folder_path, output_zip_path)
# 示例2:只压缩特定类型的文件(如只压缩图片和PDF)
# print("\n--- 示例2:只压缩图片和PDF ---")
# compress_folder_to_zip(source_folder_path, os.path.expanduser("~/Desktop/图片文档.zip"), include_file_types=['.jpg', '.png', '.pdf'])
操作步骤:
准备文件夹: 在桌面创建一个名为我的项目资料的文件夹,放入一些不同类型的文件和子文件夹,使其总大小稍大一些(比如几MB甚至几十MB),以体现压缩效果。
修改代码路径: 复制上方代码到VS Code,保存为compress_files.py。修改 source_folder_path 和 output_zip_path 为你实际的文件夹路径和想要保存的zip文件路径。
运行: 在VS Code终端运行 python compress_files.py。
2. 文件“还原”利器:Python批量解压缩,一键还原,轻松查看!
收到了同事发来的.zip压缩包?或者下载了一堆打包文件?Python能帮你一键解压,快速还原所有内容,让你的文件传输流程更加流畅!
主要功能:
批量解压缩: 快速将.zip包解压到指定位置,包括内部的文件夹结构。
处理多种压缩包: zipfile库主要处理.zip格式,但未来还可以扩展支持.rar、.7z等。
如何实现: zipfile库同样提供了简单的API,可以批量解压.zip文件到指定目录。
import os
import zipfile
def extract_zip_to_folder(zip_file_path, target_folder_path):
"""
解压缩zip文件到指定文件夹。
这是高效的Python文件解压工具。
:param zip_file_path: 要解压的zip文件完整路径
:param target_folder_path: 解压目标文件夹路径
"""
if not os.path.exists(zip_file_path):
print(f"❌ Zip文件不存在:{zip_file_path}")
return
os.makedirs(target_folder_path, exist_ok=True) # 确保目标文件夹存在
print(f"🚀 正在解压 '{zip_file_path}' 到 '{target_folder_path}'...")
try:
with zipfile.ZipFile(zip_file_path, 'r') as zf:
zf.extractall(target_folder_path) # 解压所有内容
print(f"✅ 解压成功!所有文件已解压到:{target_folder_path}")
except Exception as e:
print(f"❌ 解压失败:{e}")
if __name__ == "__main__":
# --- 请修改为你的实际zip文件路径和目标解压路径 ---
# 假设你已经运行了2.1节的压缩代码,并生成了 '项目资料_归档.zip'
source_zip_file = os.path.expanduser("~/Desktop/项目资料_归档.zip")
output_extracted_folder = os.path.expanduser("~/Desktop/解压后资料")
os.makedirs(output_extracted_folder, exist_ok=True) # 确保目标文件夹存在
extract_zip_to_folder(source_zip_file, output_extracted_folder)
操作步骤:
准备zip文件: 使用2.1节的代码生成一个.zip文件,或者手动准备一个包含文件的.zip包。
修改代码路径: 修改 source_zip_file 和 output_extracted_folder 为你实际的路径。
运行: 在VS Code终端运行 python extract_zip.py。
效果展示:
总结与展望:你的文件传输从此“飞”起来!
恭喜你!通过本篇文章,你已经成功掌握了Python文件管理的两大核心魔法——文件批量压缩和文件解压!我们从文件太大难传输的痛点出发,学会了:
Python文件压缩: 利用Python实现批量打包文件,让你的大文件传输变得轻松流畅。
Python文件解压: 运用Python实现文件解压,快速还原,告别等待。
现在,你不再需要担心大文件发送不出去,也不用忍受漫长的传输和解压过程。你拥有了一个强大的职场效率加速器,能够让你的文件秒变小,传输更流畅!
你平时都是用什么方法压缩文件的?你最希望Python在文件传输方面还能帮你实现哪些功能?比如自动上传到云盘?或者与邮件发送集成?在评论区分享你的奇思妙想和应用场景,我将积极与你互动,或许你的想法就是我们未来文章的灵感来源!
敬请期待! 文件传输之旅才刚刚开始。在下一篇文章中,我们将继续深入Python办公自动化的宝库,探索文件安全的秘密——如何利用Python实现文件加密解密,为你的敏感数据穿上“铁布衫”,彻底告别数据泄露的隐患!
最后,感谢您的阅读!如果您觉得本文对您有帮助,请点赞、收藏、评论,您的支持是我持续创作的最大动力!