使用 python 解压缩主文件夹中的文件夹中的 gz 文件



我在多个文件夹中.gz压缩文件,这些文件都位于名为"usa"的主文件夹中。我能够使用以下代码提取单个文件。

import gzip
import shutil
source=r"C:usauc300.dbf.gz"
output=r"C:usauc300.dbf"
with gzip.open(source,"rb") as f_in, open(output,"wb") as f_out:
shutil.copyfileobj(f_in, f_out)

我已经搜索了高低,但找不到与命令行选项gzip -dr.....等效的,这意味着"解压缩递归",并将遍历每个文件夹并将内容提取到同一位置,同时删除原始压缩文件。有谁知道我如何使用python循环浏览文件夹中的文件夹,找到任何压缩文件并将它们解压缩到同一位置,同时将解压缩的文件替换为压缩文件?

我相信这是因为 gzip 从不对目录进行操作,它充当压缩算法,不像 zip 和 tar 我们可以压缩目录。 Python 对 gzip 的实现是对文件进行操作。但是,如果我们查看 os.walk 调用,目录树的递归遍历很容易。

(我还没有测试过这个(

def gunzip(file_path,output_path):
with gzip.open(file_path,"rb") as f_in, open(output_path,"wb") as f_out:
shutil.copyfileobj(f_in, f_out)
def recurse_and_gunzip(root):
walker = os.walk(root)
for root,dirs,files in walker:
for f in files:
if fnmatch.fnmatch(f,"*.gz"):
gunzip(f,f.replace(".gz",""))

它可能无法回答这个特定问题,但对于那些希望提取 gzip 目录结构的人来说:这将是shutil.unpack_archive的工作。

例如:

import shutil
shutil.unpack_archive(
filename='path/to/archive.tar.gz', extract_dir='where/to/extract/to'
)

您也可以使用此格式。

import tarfile, glob
base_dir = '/home/user/pipelines/data_files/'

for name in glob.glob(base_dir + '*.gz'):
print(name)
tf = tarfile.open(name)
tf.extractall(base_dir + 'unzipped_files/')
print('-- Done') 

最新更新