『壹』 请问python的 zipfile 怎么解压中文密码的zip文件

  • 是python2还是3?

  • 错误截图看一下

  • 也可以私信发zip包和代码来测试一下

『贰』 python怎样压缩和解压缩ZIP文件

有时我们需要在Python中使用zip文件,而在1.6版中,Python就已经提供了zipfile模块可以进行这样的操作。不过Python中的zipfile模块不能处理多卷的情况,不过这种情况并不多见,因此在通常情况下已经足够使用了。下面我只是对一些基本的zipfile操作进行了记录,足以应付大部分的情况了。

zipfile模块可以让你打开或写入一个zip文件。比如:

import zipfile

z = zipfile.ZipFile('zipfilename', mode='r')

这样就打开了一个zip文件,如果mode为'w'或'a'则表示要写入一个zip文件。如果是写入,则还可以跟上第三个参数:

compression=zipfile.ZIP_DEFLATED或

compression=zipfile.ZIP_STORED ZIP_DEFLATED是压缩标志,如果使用它需要编译了zlib模块。而后一个只是用zip进行打包,并不压缩。

在打开了zip文件之后就可以根据需要是读出zip文件的内容还是将内容保存到zip文件中。

读出zip中的内容

很简单,zipfile对象提供了一个read(name)的方法。name为zip文件中的一个文件入口,执行完成之后,将返回读出的内容,你把它保存到想到的文件中即可。

写入zip文件

有两种方式,一种是直接写入一个已经存在的文件,另一种是写入一个字符串。

对于第一种使用zipfile对象的write(filename, arcname, compress_type),后两个参数是可以忽略的。第一个参数是文件名,第二个参数是表示在zip文件中的名字,如果没有给出,表示使用与filename一样的名字。compress_type是压缩标志,它可以覆盖创建zipfile时的参数。第二种是使用zipfile对象的writestr(zinfo_or_arcname, bytes),第一个参数是zipinfo对象或写到压缩文件中的压缩名,第二个参数是字符串。使用这个方法可以动态的组织文件的内容。

需要注意的是在读出时,因为只能读出内容,因此如果想实现按目录结构展开zip文件的话,这些操作需要自已来完成,比如创建目录,创建文件并写入。而写入时,则可以根据需要动态组织在zip文件中的目录结构,这样可以不按照原来的目录结构来生成zip文件。

于是我为了方便使用,创建了自已的一个ZFile类,主要是实现象winrar的右键菜单中的压缩到的功能--即将一个zip文件压缩到指定目录,自动创建相应的子目录。再有就是方便生成zip文件。类源码为:

[python]view plain

  • #coding:cp936

  • #Zfile.py

  • #xxteach.com

  • importzipfile

  • importos.path

  • importos

  • classZFile(object):

  • def__init__(self,filename,mode='r',basedir=''):

  • self.filename=filename

  • self.mode=mode

  • ifself.modein('w','a'):

  • self.zfile=zipfile.ZipFile(filename,self.mode,compression=zipfile.ZIP_DEFLATED)

  • else:

  • self.zfile=zipfile.ZipFile(filename,self.mode)

  • self.basedir=basedir

  • ifnotself.basedir:

  • self.basedir=os.path.dirname(filename)

  • defaddfile(self,path,arcname=None):

  • path=path.replace('//','/')

  • ifnotarcname:

  • ifpath.startswith(self.basedir):

  • arcname=path[len(self.basedir):]

  • else:

  • arcname=''

  • self.zfile.write(path,arcname)

  • defaddfiles(self,paths):

  • forpathinpaths:

  • ifisinstance(path,tuple):

  • self.addfile(*path)

  • else:

  • self.addfile(path)

  • defclose(self):

  • self.zfile.close()

  • defextract_to(self,path):

  • forpinself.zfile.namelist():

  • self.extract(p,path)

  • defextract(self,filename,path):

  • ifnotfilename.endswith('/'):

  • f=os.path.join(path,filename)

  • dir=os.path.dirname(f)

  • ifnotos.path.exists(dir):

  • os.makedirs(dir)

  • file(f,'wb').write(self.zfile.read(filename))

  • defcreate(zfile,files):

  • z=ZFile(zfile,'w')

  • z.addfiles(files)

  • z.close()

  • defextract(zfile,path):

  • z=ZFile(zfile)

  • z.extract_to(path)

  • z.close()

『叁』 python 3.2版本 解压rar/zip到指定目录

#!/usr/bin/env python3
import os,zipfile
def Zip(target_dir):
target_file=os.path.basename(os.getcwd())+'.zip'
zip_opt=input("Will you zip all the files in this dir?(Choose 'n' you should add files by hand)y/n: ")
while True:
if zip_opt=='y': #compress all the files in this dir
filenames=os.listdir(os.getcwd()) #get the file-list of this dir
zipfiles=zipfile.ZipFile(os.path.join(target_dir,target_file),'w',compression=zipfile.ZIP_DEFLATED)
for files in filenames:
zipfiles.write(files)
zipfiles.close()
print("Zip finished!")
break
elif zip_opt=='n': #compress part of files of this dir
filenames=list(input("Please input the files' name you wanna zip:"))
zipfiles=zipfile.ZipFile(os.path.join(target_dir,target_file),'w',compression=zipfile.ZIP_DEFLATED)
for files in filenames:
zipfiles.write(files)
zipfiles.close()
print("Zip finished!")
break
else:
print("Please in put the character 'y' or 'n'")
zip_opt=input("Will you zip all the files in this dir?(Choose 'n' you should add files by hand)y/n: ")
def Unzip(target_dir):
target_name=input("Please input the file you wanna unzip:")
zipfiles=zipfile.ZipFile(target_name,'r')
zipfiles.extractall(os.path.join(target_dir,os.path.splitext(target_name)[0]))
zipfiles.close()
print("Unzip finished!")
def main():
opt=input("What are you gonna do?Zip choose 'y',unzip choose 'n'.y/n: ")
while True:
if opt=='y': #compress files
zip_dir=input("Please input the absdir you wanna put the zip file in:")
Zip(zip_dir)
break
elif opt=='n': #unzip files
unzip_dir=input("Please input the absdir you wanna put the zip file in(Nothing should be done if you wann unzip files in the current dir):")
if unzip_dir=='':
Unzip(os.getcwd())
else:
Unzip(unzip_dir)
break
else:
print("Please input the character 'y' or 'n'")
opt=input("What are you gonna do?Zip choose 'y',unzip choose 'n'.y/n: ")
if __name__=='__main__':
main()
解压和压缩都有,自己稍微改改解压的文件名就行了

『肆』 如何通过Python压缩解压缩zip文件

解压缩

importzipfile
importos
defun_zip(file_name):
"""unzipzipfile"""
zip_file=zipfile.ZipFile(file_name)
ifos.path.isdir(file_name+"_files"):
pass
else:
os.mkdir(file_name+"_files")
fornamesinzip_file.namelist():
zip_file.extract(names,file_name+"_files/")
zip_file.close()

打包

zipfile.ZipFile('xxx.zip','a/w/x').write('xxx.txt')

'w'以截断并写入新文件'a'以附加到现有文件,或'x'以专门创建和写入新文件。

『伍』 python怎样压缩和解压缩ZIP文件

1、说明

python使用zipfile模块来压缩和解压zip文件

2、代码

importos,os.path
importzipfile

defzip_dir(dirname,zipfilename):
filelist=[]
ifos.path.isfile(dirname):
filelist.append(dirname)
else:
forroot,dirs,filesinos.walk(dirname):
fornameinfiles:
filelist.append(os.path.join(root,name))

zf=zipfile.ZipFile(zipfilename,"w",zipfile.zlib.DEFLATED)
fortarinfilelist:
arcname=tar[len(dirname):]
#printarcname
zf.write(tar,arcname)
zf.close()


defunzip_file(zipfilename,unziptodir):
ifnotos.path.exists(unziptodir):os.mkdir(unziptodir)
zfobj=zipfile.ZipFile(zipfilename)
fornameinzfobj.namelist():
name=name.replace('\','/')

ifname.endswith('/'):
os.mkdir(os.path.join(unziptodir,name))
else:
ext_filename=os.path.join(unziptodir,name)
ext_dir=os.path.dirname(ext_filename)
ifnotos.path.exists(ext_dir):os.mkdir(ext_dir)
outfile=open(ext_filename,'wb')
outfile.write(zfobj.read(name))
outfile.close()

if__name__=='__main__':
zip_dir(r'd:/python/test',r'd:/python/test.zip')
unzip_file(r'd:/python/test.zip',r'd:/python/test2')

执行结果

顺利生成相应文件

3、备注

zip文件格式是通用的文档压缩标准,在zipfile模块中,使用ZipFile类来操作zip文件,下面具体介绍一下:
class zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])

创建一个ZipFile对象,表示一个zip文件。参数file表示文件的路径或类文件对象(file-like object);参数mode指示打开zip文件的模式,默认值为'r',表示读已经存在的zip文件,也可以为'w'或'a','w'表示新建一个zip文档或覆盖一个已经存在的zip文档,'a'表示将数据附加到一个现存的zip文档中。参数compression表示在写zip文档时使用的压缩方法,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED。如果要操作的zip文件大小超过2G,应该将allowZip64设置为True。

ZipFile还提供了如下常用的方法和属性:
ZipFile.getinfo(name):

获取zip文档内指定文件的信息。返回一个zipfile.ZipInfo对象,它包括文件的详细信息。将在下面 具体介绍该对象。
ZipFile.infolist()

获取zip文档内所有文件的信息,返回一个zipfile.ZipInfo的列表。
ZipFile.namelist()

获取zip文档内所有文件的名称列表。
ZipFile.extract(member[, path[, pwd]])

『陆』 python zip 是什么

zip就是把2个数组糅在一起
x=[1, 2, 3, 4, 5 ]
y=[6, 7, 8, 9, 10]
zip(x, y)就得到了
[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]

比如你有2组坐标,你想两两对应的相加,那么zip函数就很有用了。
再比如,你有2个数组A,B,A存了班级里的人的名字,B是每个人的考试分数,你需要通过某个人的名字来查考试分数,那你需要一个字典,zip可以很方便地帮你建立字典:
>>> x=['bob','tom','kitty']
>>> y=[80,90,95]
>>>d=dict(zip(x,y))
[('bob', 80), ('tom', 90), ('kitty', 95)]
>>> d['bob']
返回80,多方便啊

『柒』 如何通过python代码解压zip包

defunzip_file(zip_src,dst_dir):
r=zipfile.is_zipfile(zip_src)
ifr:
fz=zipfile.ZipFile(zip_src,'r')
forfileinfz.namelist():
fz.extract(file,dst_dir)
else:
print('Thisisnotzip')
#zip_src:是zip文件的全路径

#dst_dir:是要解压到的目的文件夹

以上代码是Python3中的内实现方容式,谢谢