Python 将文件从ZIP直接解压缩到另一个ZIP
我的目标是从Zip存档中提取某些文件,并将它们直接流式传输到另一个Zip,而无需对磁盘执行中间提取 到目前为止,我已经:Python 将文件从ZIP直接解压缩到另一个ZIP,python,python-3.x,archive,zipfile,Python,Python 3.x,Archive,Zipfile,我的目标是从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
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:参数应该是字符串、字节或整数,而不是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))
你就不能复制zip文件吗?@Okx不,因为我只想从
file\u subset\u list