有時我們需要在 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 文件。類源碼為:
# coding:cp936
# Zfile.py
# xxteach.com
import zipfile
import os.path
import os
class ZFile(object):
def __init__(self, filename, mode='r', basedir=''):
self.filename = filename
self.mode = mode
if self.mode in ('w', 'a'):
self.zfile = zipfile.ZipFile(filename, self.mode, compression=zipfile.ZIP_DEFLATED)
else:
self.zfile = zipfile.ZipFile(filename, self.mode)
self.basedir = basedir
if not self.basedir:
self.basedir = os.path.dirname(filename)
def addfile(self, path, arcname=None):
path = path.replace('//', '/')
if not arcname:
if path.startswith(self.basedir):
arcname = path[len(self.basedir):]
else:
arcname = ''
self.zfile.write(path, arcname)
def addfiles(self, paths):
for path in paths:
if isinstance(path, tuple):
self.addfile(*path)
else:
self.addfile(path)
def close(self):
self.zfile.close()
def extract_to(self, path):
for p in self.zfile.namelist():
self.extract(p, path)
def extract(self, filename, path):
if not filename.endswith('/'):
f = os.path.join(path, filename)
dir = os.path.dirname(f)
if not os.path.exists(dir):
os.makedirs(dir)
file(f, 'wb').write(self.zfile.read(filename))
def create(zfile, files):
z = ZFile(zfile, 'w')
z.addfiles(files)
z.close()
def extract(zfile, path):
z = ZFile(zfile)
z.extract_to(path)
z.close()
2. python寫的一個壓縮文件的程序(windows環境下),哪裡錯了求指點
代碼中會生成一條系統命令行的指令,然後通過os.system在命令行中執行。
代碼中生成的命令是"zip -qr 'xxx' xxx"
需要使用zip.exe程序,必須確保電腦中有安裝
3. Python:一位大俠寫的壓縮文件的代碼,看不懂,新手求指導
就是遍歷目錄對每個文件進行壓縮吧
如果你的python版本是2.7或以上的 就沒必要那麼麻煩 用下面的代碼就可以了
importshutil
shutil.make_archive("filename","zip","dir")
4. python怎麼修改壓縮文件中的文件
python解壓修改壓縮文件中的文件。使用python修改壓縮文件中的文件可以先將壓縮文件解壓,待修改完成後,再將所有文件壓縮成壓縮文件,所以python解壓修改壓縮文件中的文件。
5. Python壓縮文件
windows下將zip.exe和unzip.exe文件放入path環境中,或者安裝zip命令工具
言簡意賅版:
6. python怎樣壓縮和解壓縮ZIP文件
Python壓縮ZIP文件:
importzipfile
f=zipfile.ZipFile(target,'w',zipfile.ZIP_DEFLATED)
f.write(filename,file_url)
f.close()
其中target:是壓縮後要保存的路徑,可以是: 'C:/temp/'
ZIP_DEFLATED:表示壓縮,還有一個參數:ZIP_STORE:表示只打包,不壓縮。
這個Linux中的gz跟tar格式有點類似.
write方法如果只有一個參數filename的話,表示把你filename所帶的路徑全部壓縮到zip文件中。如果帶兩個參數,表示把filename路徑中的那個file壓縮一下並且存放到file_url中,中間沒有增加任何的文件夾。
如果要壓縮很多的文件,循環的write就ok了, 最後close掉。
Python解壓ZIP文件:
f=zipfile.ZipFile("zipfilePath",'r')
forfileinf.namelist():
f.extract(file,"temp/")
zipfilePath是壓縮文件的路徑
循環訪問該壓縮文件中的文件,並且一個一個file的解壓到對應的"temp"文件夾中
7. python壓縮成tar
Python壓縮文件為tar、gzip的方源碼。需要應用到os、tarfile、gzip、string、shutil這幾個Python類庫中的方法。不同於Python Gzip壓縮與解壓模塊,今天我們要用自己的方法實現壓...
8. 如何通過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'以專門創建和寫入新文件。
9. Python實現批量壓縮文件/文件夾——zipfile
zipfile是python里用來做zip格式編碼的壓縮和解壓縮的,由於是很常見的zip格式,所以這個模塊使用頻率也是比較高的,
在這里對zipfile的使用方法做一些記錄。即方便自己也方便別人。
Python zipfile模塊用來做zip格式編碼的壓縮和解壓縮的,要進行相關操作,首先需要實例化一個 ZipFile 對象。ZipFile 接受一個字元串格式壓縮包名稱作為它的必選參數,第二個參數為可選參數,表示打開模式,類似於文件操作,有r/w/a三種模式,分別代表讀、寫、添加,默認為r,即讀模式。
zipfile里有兩個非常重要的class, 分別是ZipFile和ZipInfo, 在絕大多數的情況下,我們只需要使用這兩個class就可以了。ZipFile是主要的類,用來創建和讀取zip文件而ZipInfo是存儲的zip文件的每個文件的信息的。
ZipFile還提供了如下常用的方法和屬性:
獲取zip文檔內指定文件的信息。返回一個zipfile.ZipInfo對象,它包括文件的詳細信息。
獲取zip文檔內所有文件的信息,返回一個zipfile.ZipInfo的列表。
獲取zip文檔內所有文件的名稱列表。
將zip文檔內的指定文件解壓到當前目錄。參數member指定要解壓的文件名稱或對應的ZipInfo對象;參數path指定了解析文件保存的文件夾;
解壓zip文檔中的所有文件到當前目錄。參數members的默認值為zip文檔內的所有文件名稱列表,也可以自己設置,選擇要解壓的文件名稱。
將zip文檔內的信息列印到控制台上。
設置zip文檔的密碼。
10. 如何用Python寫一個暴力破解加密壓縮包的程
有些時候加密rar軟體經常會忘了密碼,但記得密碼的大概,於是乎用Python寫個程序來暴力破解吧:
首先要搞清楚如何用命令行來解壓縮,經研究,rar軟體解壓是用的unrar.exe,將這個程序拷貝到C:\windows,然後進入加密軟體包所在的文件夾,用命令行運行 下面的命令:
unrar.exe e -pabcd 123.rar
程序就是先前拷到C:\windows,然後參數e是指相對路徑,如果在是本文件夾下運行這個命令,則只打文件名就可以了,輸入密碼的方式是-p後面的欄位,假定是abcd,最後面的是要解壓的文件名。
下面我們解決如何用Python來運行windows下的命令行
import subprocess
command = 'unrar.exe e -n -pabcd 123.rar'
subprocess.call(command)
這樣也可以完成解壓,既然這樣,那就開干吧,寫一個暴力循環,我以4位字母為例,字母加的不全,實際使用可以視情況添加
list1=['a','b','c','d']
list2=['a','b','c','d']
list3=['a','b','c','d']
list4=['a','b','c','d']
for i1 in range(0,len(list1),1):
for i2 in range(0,len(list2),1):
for i3 in range(0, len(list3), 1):
for i4 in range(0, len(list4), 1):
password=list1[i1]+list2[i2]+list3[i3]+list4[i4]
print(password)
command = 'unrar.exe e -n -p' + password + ' 123.rar'
child = subprocess.call(command)
if child == 0:
print('解壓密碼是:',password)
break
child是返回值,為0表示解壓成功,可以挑出循環並列印密碼了,我實測,4位純數字或者字母,只需要十多秒就出來了,非常簡單