簡體   English   中英

使用python解壓縮主文件夾中文件夾中的gz文件

[英]Unzip gz files within folders in a main folder using python

我在多個文件夾中都有 .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",""))

它可能無法回答這個特定問題,但對於那些希望提取壓縮目錄結構的人來說:這將是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') 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM