【问题标题】:How to efficiently convert multiple .gz files to one .tar.gz in Python?如何在 Python 中高效地将多个 .gz 文件转换为一个 .tar.gz?
【发布时间】:2021-08-01 19:33:50
【问题描述】:

我想在 Python 中将多个 .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

【问题讨论】:

  • 如果你的文件已经被压缩了,为什么还要再压缩后解压。您可以连接存档中的所有文件。恕我直言,这是最有效的方法。
  • 对不起,我是这个领域的新手,不知道gz文件可以按原样组合。因为如果target_gz的层次很深,我想保留它并放在一起。
  • 如果您想尝试,我发布了答案。

标签: python python-3.x gzip tar


【解决方案1】:

这应该可行:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 2019-08-27
    • 2017-01-08
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    相关资源
    最近更新 更多