python中的zipfile?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中的zipfile?相关的知识,希望对你有一定的参考价值。

import zipfile,glob
file=zipfile.ZipFile('tt.zip','w')
for i in glob.glob('mytest\*'):
file.write(i)
file.close()
程序中mytest目录下还有一个mysub的文件夹,压缩后只有mytest目录下的文档,但是mysub下的文档却没有,这是为何?

参考技术A python中的zipfile模块是用于解压/压缩zip文件的,压缩a.txt为a.zip,从b.zip解压出b.txt(假设它们都放在d:\,且b.zip中只有b.txt)示范代码如下5行:
from os import chdir;
from zipfile import ZipFile;
chdir("d:/");
with Zipfile("d:/b.zip","r") as zipf:zipf.extractall();
with Zipfile("d:/a.zip","w") as zipf:zipf.write("d:/a.txt");

Python中的ZipFile模块出现错误的幻数错误

【中文标题】Python中的ZipFile模块出现错误的幻数错误【英文标题】:Bad magic number error with ZipFile module in Python 【发布时间】:2011-10-09 12:55:33 【问题描述】:

我在 Windows 7(64 位)上使用 Python 2.7。 当我尝试使用 ZipFile 模块解压缩 zip 文件时,出现以下错误:-

Traceback (most recent call last):
  File "unzip.py", line 8, in <module>
    z.extract(name)
  File "C:\Python27\lib\zipfile.py", line 950, in extract
    return self._extract_member(member, path, pwd)
  File "C:\Python27\lib\zipfile.py", line 993, in _extract_member
    source = self.open(member, pwd=pwd)
  File "C:\Python27\lib\zipfile.py", line 897, in open
    raise BadZipfile, "Bad magic number for file header"
zipfile.BadZipfile: Bad magic number for file header

WinRAR 可以很好地提取我尝试提取的文件。 这是我用来从myzip.zip提取文件的代码

from zipfile import ZipFile
z = ZipFile('myzip.zip')   //myzip.zip contains just one file, a password protected pdf        
for name in z.namelist():
    z.extract(name)

此代码适用于我使用 WinRAR 创建的许多其他 zip 文件,但 myzip.zip

我尝试在Python27\Lib\zipfile.py 中评论以下行:-

if fheader[0:4] != stringFileHeader:
   raise BadZipfile, "Bad magic number for file header"

但这并没有真正帮助。运行我的代码,我的 shell 上有一些转储。

【问题讨论】:

【参考方案1】:

正确的 ZIP 文件总是以“\x50\x4B\x03\x04”开头。您可以使用以下代码测试文件是否真的是 ZIP 文件:

with open('/path/to/file', 'rb') as MyZip:
  print(MyZip.read(4))

它会打印文件头以便你检查。

更新 奇怪,testzip() 和所有其他功能都很好用。你试过这样的代码吗?

with zipfile.GzipFile('/path/to/file') as Zip:
  for ZipMember in Zip.infolist():
    Zip.extract(ZipMember, path='/dir/where/to/extract', pwd='your-password')

【讨论】:

@petr-viktorin 是的,它是一个 zip。上面的代码给出了PK♥♦ 作为输出。 嗯。您能否将您的文件放在任何服务器上,以便我查看并尝试打开它? 看原来的答案,我又发了一个想法。 嗯,我无法使用 Ark 从您的文件中提取 pdf。更正确的是,它会提取大小为 0 KiB 的空文件。 Python 的 zipfile 目前只支持 DEFLATE 方法。看来你是用其他方法用 WinRar 创建文件的,所以 zipfile 只能读取文件,不能解压。【参考方案2】:

确保您真正打开的是 ZIP 文件,而不是例如扩展名为 .zip 的 RAR 文件。正确的 zip 文件有一个标题,在这种情况下没有找到。

zipfile 模块只能打开 zip 文件。 WinRAR 也可以打开其他格式,它可能会忽略文件名而只查看文件本身。

【讨论】:

以上是关于python中的zipfile?的主要内容,如果未能解决你的问题,请参考以下文章

Python - 将内存中的 ZipFile 对象加载为字节

写入时Python zipfile挂起

Python中的ZipFile模块出现错误的幻数错误

Python 中的 ZipFile 模块 - 运行时问题

在 Python 中重命名 ZipFile

python 将文件夹中的文件递归写入ZIPFile对象