gpt4 book ai didi

python - 更新zip存档时文件重复

转载 作者:行者123 更新时间:2023-12-04 16:04:50 24 4
gpt4 key购买 nike

我正在尝试更新 zip 存档中的文件并将其另存为新存档。我使用的 zip 存档是 excel .xlsm文件和我需要修改的文件在子文件夹中:xl/vbaProject.bin .我编写了一个函数(通过修改此处发布的函数:How to update one file inside zip file using python)。

def updateZip2(zip_name, file, data):
# generate a temp file
tmp = os.path.splitext(ntpath.basename(zip_name))[0] + '_new.xlsm'
tmpname = str(pathlib.Path(zip_name).parent.joinpath(tmp))
print(tmpname)

with zipfile.ZipFile(zip_name, 'r') as zin:
with zipfile.ZipFile(tmpname, 'w') as zout:
zout.comment = zin.comment # preserve the comment
for item in zin.infolist():
if item.filename.find(file) == -1:
zout.writestr(item, zin.read(item.filename))

当我这样调用这个函数时: updateZip2('Book1.xlsm', r'xl\vbaProject.bin', target2)一个新的 Book1_new.xlsm按预期创建,但我收到警告:
C:\ProgramData\Anaconda3\lib\zipfile.py:1355: UserWarning: Duplicate name: 'xl/vbaProject.bin'
return self._open_to_write(zinfo, force_zip64=force_zip64)

当我用 WinZip 打开文件时,我可以看到 vbaProject.bin 是重复的。任何想法为什么以及如何纠正此行为以复制 zip 中的所有文件 来自 的除外 xl\vbaProject.bin

最佳答案

file你要传递给 updateZip2()是:

r'xl\vbaProject.bin'

但存储在 ZIP 中的文件格式为:
r'xl/vbaProject.bin'

因此,如果您更改 \,它应该可以工作至 /在您的电话中:
updateZip2('Book1.xlsm', r'xl/vbaProject.bin', target2)

或者,您可以将平等测试更新为:
if os.path.normpath(item.filename) != os.path.normpath(file):

关于python - 更新zip存档时文件重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49234432/

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