python-更新zip存档时文件重复
我正在尝试更新zip存档中的文件并将其另存为新存档。我使用的zip归档文件是一个excelpython-更新zip存档时文件重复,python,excel,zip,zipfile,Python,Excel,Zip,Zipfile,我正在尝试更新zip存档中的文件并将其另存为新存档。我使用的zip归档文件是一个excel.xlsm文件,我需要修改的文件位于子文件夹中:xl/vbaProject.bin。我编写了一个函数(通过修改此处发布的函数:) 当我这样调用此函数时: updateZip2('Book1.xlsm',r'xl\vbaProject.bin',target2) 新的Book1\u new.xlsm按预期创建,但我收到警告: C:\ProgramData\Anaconda3\lib\zipfile.py:13
.xlsm
文件,我需要修改的文件位于子文件夹中:xl/vbaProject.bin
。我编写了一个函数(通过修改此处发布的函数:)
当我这样调用此函数时:
updateZip2('Book1.xlsm',r'xl\vbaProject.bin',target2)
新的Book1\u 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
传递到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):
if os.path.normpath(item.filename) != os.path.normpath(file):