You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何GZIP压缩文件夹内所有文件?附解压GZ到TXT的Python代码

处理GZIP文件:解压.gz到.txt,以及压缩文件夹内所有文件

一、补全并优化你的.gz解压为.txt的代码

你之前的代码已经有了基础框架,我帮你补全并优化了细节,比如自动创建目标目录、正确生成输出文件名等:

import os
import gzip
import shutil

extension = ".gz"
dir_name = 'C:\\test'
dest_name= 'C:\\test\\Extract'

# 自动创建解压目标目录(如果不存在则创建,避免报错)
os.makedirs(dest_name, exist_ok=True)

os.chdir(dir_name)
for item in os.listdir(dir_name):
    if item.endswith(extension):
        file_name = os.path.abspath(item)
        # 生成解压后的txt文件名:去掉.gz后缀,加上.txt
        output_filename = os.path.join(dest_name, os.path.splitext(item)[0] + ".txt")
        # 读取gz文件并写入txt
        with gzip.open(file_name, 'rb') as f_in:
            with open(output_filename, 'wb') as f_out:
                shutil.copyfileobj(f_in, f_out)
        print(f"完成解压:{item} → {output_filename}")

关键说明:

  • os.makedirs(dest_name, exist_ok=True):确保目标解压目录存在,不用手动创建
  • os.path.splitext(item)[0]:安全地去掉.gz后缀,避免文件名里有多个点的情况
  • shutil.copyfileobj:高效地在文件流之间复制内容,比逐行读取更适合大文件

二、压缩文件夹内的所有文件

分两种常见场景,你可以根据需求选择:

场景1:每个文件单独压缩为对应的.gz文件

如果想把文件夹里的每个文件都单独压缩成文件名.gz,可以用这段代码:

import os
import gzip
import shutil

source_dir = 'C:\\test\\FilesToCompress'  # 待压缩文件所在目录
compress_dir = 'C:\\test\\Compressed'    # 压缩文件存放目录

os.makedirs(compress_dir, exist_ok=True)

for filename in os.listdir(source_dir):
    file_path = os.path.join(source_dir, filename)
    # 只处理文件,跳过子目录
    if os.path.isfile(file_path):
        compressed_file_path = os.path.join(compress_dir, f"{filename}.gz")
        with open(file_path, 'rb') as f_in:
            with gzip.open(compressed_file_path, 'wb') as f_out:
                shutil.copyfileobj(f_in, f_out)
        print(f"完成压缩:{filename} → {compressed_file_path}")

场景2:将整个文件夹打包并压缩为一个.tar.gz文件

如果需要把整个文件夹的内容打包成一个压缩包(这是更常见的归档方式),可以用tarfile模块:

import tarfile
import os

source_dir = 'C:\\test\\FilesToCompress'
output_archive = 'C:\\test\\folder_archive.tar.gz'

# 'w:gz'表示以gzip压缩模式写入tar包
with tarfile.open(output_archive, 'w:gz') as tar:
    # arcname参数设置压缩包内的根目录名称,避免把本地完整路径带进去
    tar.add(source_dir, arcname=os.path.basename(source_dir))
print(f"完成打包压缩:{source_dir} → {output_archive}")

内容的提问来源于stack exchange,提问作者sai vig

火山引擎 最新活动