如何高效地将多个.gz文件转换为一个.tar.gz文件? [英] How to efficiently convert multiple .gz files to one .tar.gz in Python?

查看:0
本文介绍了如何高效地将多个.gz文件转换为一个.tar.gz文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望将多个.gz(而不是tar.gz)文件合并为一个.tar.gz文件。

我创建了临时文件,逐个解压并使用了Tarfile#addfile。
我可以做我想做的事情,但我觉得效率很低。
我想用缓冲器。 有什么有效的方法吗?

谢谢。

当前情况是这样的:

def make_tmp(gz_file):
    with open(gz_file) as rt:
        with open("tmp/" + gz_file, mode="wb") as w:
            while True:
                buf = rt.read(65535)
                if not buf:
                    break
                w.write(buf)

gz_files = os.listdir("target_gz")

for gz in gz_files:
    make_tmp(gz)

with tarfile.open("combined.tar.gz", mode="w:gz") as tw:
    for tmp in os.listdir("tmp")
        tw.add(tmp)


我希望它是这样的:

with tarfile.open("combined.tar.gz", mode="w:gz") as tw:
    for gz in os.listdir("target_gz"):
        with open(gz, mode="rb") as r:
            while True:
                buf = rt.read(65535)
                if not buf:
                    break
                tw.write(gz[:12], buf) # I want to add a file, cut "target_file" and store it

目录树:

.
├── target_gz/
│   ├── foo.gz
│   └── bar.gz
├── tmp/
│   ├── foo.file
│   └── bar.file
├── run.py
└── combined.tar.gz

推荐答案

这应该可以工作:

import pathlib
import tarfile

with tarfile.open('combined.tar.gz', 'w') as tw:
    for filename in pathlib.Path('./target_gz').glob('*.gz'):
        print(filename)
        tw.add(filename)

这篇关于如何高效地将多个.gz文件转换为一个.tar.gz文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆