【问题标题】:Unzip gz files within folders in a main folder using python使用python解压缩主文件夹中文件夹中的gz文件
【发布时间】:2018-01-17 16:49:52
【问题描述】:

我在多个文件夹中都有 .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 模块不支持压缩文件夹。

标签: python zip unzip gzip


【解决方案1】:

我相信这是因为 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",""))

【讨论】:

  • 我以为它们会是一个批处理实用程序,但这应该可以正常工作。
  • 小编辑:您需要在提供给 gunzip 的文件路径中包含根前缀,即 gunzip(root+"/"+f, root+"/"+f.replace(".gz","" ))
猜你喜欢
  • 1970-01-01
  • 2022-12-07
  • 2015-09-29
  • 2010-09-05
  • 2023-03-18
  • 2015-04-05
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
相关资源
最近更新 更多