相关疑难解决方法(0)

使用ZipFile模块从zipfile中删除文件

我从zipfile中删除文件的唯一方法是创建一个临时zipfile而不删除该文件,然后将其重命名为原始文件名.

在python 2.4中,ZipInfo类有一个属性file_offset,因此可以创建第二个zip文件并将数据复制到其他文件而不进行解压缩/重新压缩.

file_offset在python 2.6中是缺失的,所以除了通过解压缩每个文件然后再次重新压缩它来创建另一个zipfile之外还有另一种选择吗?

是否有可能直接删除zipfile中的文件,我搜索并没有找到任何东西.

python zip delete-file

35
推荐指数
4
解决办法
2万
查看次数

用ziparchive覆盖文件

我有archive.zip两个文件:hello.txtworld.txt

我想hello.txt使用该代码覆盖新文件:

import zipfile

z = zipfile.ZipFile('archive.zip','a')
z.write('hello.txt')
z.close()  
Run Code Online (Sandbox Code Playgroud)

但它不会覆盖文件,不知何故它会创建另一个实例hello.txt- 看看winzip截图:

替代文字

既然没有smth zipfile.remove(),那么处理这个问题的最佳方法是什么?

python ziparchive

27
推荐指数
2
解决办法
1万
查看次数

如何删除或替换zip存档中的文件?

我正在用Python创建一个程序,它下载一组文件并将它们放入带有zipfile模块的存档中.

我已经找到了如何附加到存档,但有些情况下存档中的文件已经存在并且应该被覆盖.

目前,如果我将已存在的文件附加到存档,我会得到重复.

有谁知道如何删除档案中的文件?

python zipfile

23
推荐指数
1
解决办法
2万
查看次数

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

我正在尝试更新 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))
Run Code Online (Sandbox Code Playgroud)

当我像这样调用这个函数时: 按预期创建了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 …
Run Code Online (Sandbox Code Playgroud)

python excel zip

5
推荐指数
1
解决办法
3963
查看次数

标签 统计

python ×4

zip ×2

delete-file ×1

excel ×1

ziparchive ×1

zipfile ×1