如何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




