python解压zip
『壹』 请问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中的内实现方容式,谢谢