20 天学 Python 文件操作:Day 16 文件压缩与解压
在日常工作中,我们经常需要对文件进行压缩和解压操作以减少存储空间或方便文件传输。今天,我们将学习如何使用 Python 进行文件的压缩与解压。
1. 使用 zipfile 模块进行 ZIP 文件操作
创建 ZIP 文件
使用 zipfile 模块可以轻松创建 ZIP 文件。
import zipfile
def create_zip(output_filename, files):
with zipfile.ZipFile(output_filename, 'w') as zipf:
for file in files:
zipf.write(file)
print(f"Added {file} to {output_filename}")
# 测试
files_to_zip = ["file1.txt", "file2.txt"]
create_zip("output.zip", files_to_zip)
解压 ZIP 文件
import zipfile
def extract_zip(zip_filename, extract_to):
with zipfile.ZipFile(zip_filename, 'r') as zipf:
zipf.extractall(extract_to)
print(f"Extracted {zip_filename} to {extract_to}")
# 测试
extract_zip("output.zip", "./extracted")
2. 使用 shutil 模块创建 TAR 文件
shutil 模块提供了创建 TAR 文件的便捷方法。
创建 TAR 文件
import shutil
def create_tar(output_filename, folder_to_compress):
shutil.make_archive(output_filename, 'gztar', folder_to_compress)
print(f"Created TAR.GZ archive: {output_filename}.tar.gz")
# 测试
create_tar("backup", "./folder_to_compress")
解压 TAR 文件
import tarfile
def extract_tar(tar_filename, extract_to):
with tarfile.open(tar_filename, 'r:gz') as tar:
tar.extractall(path=extract_to)
print(f"Extracted {tar_filename} to {extract_to}")
# 测试
extract_tar("backup.tar.gz", "./extracted")
3. 压缩文件夹中的所有文件
我们可以递归遍历文件夹,将文件夹内容压缩为一个归档文件。
示例代码:压缩文件夹
import os
import zipfile
def zip_folder(folder_path, output_filename):
with zipfile.ZipFile(output_filename, 'w') as zipf:
for root, dirs, files in os.walk(folder_path):
for file in files:
file_path = os.path.join(root, file)
arcname = os.path.relpath(file_path, folder_path)
zipf.write(file_path, arcname)
print(f"Added {file_path} as {arcname}")
# 测试
zip_folder("./folder_to_compress", "compressed_folder.zip")
4. 实践练习
- 创建一个 ZIP 文件,包含当前目录下的所有 .txt 文件。
- 编写脚本,自动解压指定目录下所有的 ZIP 文件。
- 将一个文件夹压缩为 TAR.GZ 文件并解压到另一个文件夹中。
通过今天的学习,你已经掌握了文件压缩与解压的基本方法。明天我们将继续探索 Python 文件操作的更多进阶内容,敬请期待!