『壹』 請問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中的內實現方容式,謝謝