【发布时间】: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