gpt4 book ai didi

python - 将文件从 ZIP 直接提取到另一个 ZIP

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:17 27 4
gpt4 key购买 nike

我的目标是从 Zip 存档中提取某些文件并将它们直接流式传输到另一个 Zip,而无需执行中间提取到磁盘。

到目前为止我有:

from zipfile import ZipFile, ZIP_DEFLATED


def stream_conents(src_zip, dst_zip, file_subset_list):
with ZipFile(src_zip, "r", compression=ZIP_DEFLATED) as src_zip_archive:
with ZipFile(dst_zip, "w", compression=ZIP_DEFLATED) as dst_zip_archive:
for zitem in src_zip_archive.namelist():
if zitem in file_subset_list:
zitem_object = src_zip_archive.open(zitem)
dst_zip_archive.write(zitem_object, zitem, )

但它只是抛出 TypeError: argument should be string, bytes or integer, not ZipExtFile

最佳答案

您可以将整个文件读入内存并使用writestr 写入存档。

def stream_conents(src_zip, dst_zip, file_subset_list):
with ZipFile(src_zip, "r", compression=ZIP_DEFLATED) as src_zip_archive:
with ZipFile(dst_zip, "w", compression=ZIP_DEFLATED) as dst_zip_archive:
for zitem in src_zip_archive.namelist():
if zitem in file_subset_list:
# warning, may blow up memory
dst_zip_archive.writestr(zitem,
src_zip_archive.read(zitem))

从 python 3.6 开始,ZipFile.open 将以写入模式打开存档文件。这使您可以分块写入文件并减少整体内存使用量。

def stream_conents(src_zip, dst_zip, file_subset_list):
with ZipFile(src_zip, "r", compression=ZIP_DEFLATED) as src_zip_archive:
with ZipFile(dst_zip, "w", compression=ZIP_DEFLATED) as dst_zip_archive:
for zitem in src_zip_archive.namelist():
if zitem in file_subset_list:
if sys.version_info >= (3, 6):
with src_zip_archive.open(zitem) as from_item:
with dst_zip_archive.open(zitem, "w") as to_item:
shutil.copyfileobj(from_item, to_item)
else:
# warning, may blow up memory
dst_zip_archive.writestr(zitem,
src_zip_archive.read(zitem))

关于python - 将文件从 ZIP 直接提取到另一个 ZIP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42301098/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com