python實現檔案壓縮與解壓

2021-08-21 14:42:23 字數 4144 閱讀 6013

最近剛剛開始學習python,現在分享乙個小**,實現檔案的壓縮與解壓。希望能給那些和我一樣,剛剛學習python的小夥伴們一些小小幫助。

方法一:通過zipfile模組實現檔案的壓縮與解壓

# -*- coding:utf8 -*-

import zipfile

import time

import os

# 使用zipfile('壓縮包完整路徑')方法獲得壓縮檔案

zipfiles=zipfile.zipfile(r'd:\python\python27\backuptestproject\20180719\134059_test2_projet.zip')

# 返回該壓縮包下的資料夾與檔名稱

print (zipfiles.namelist())

print (zipfiles.namelist()[1])

# 獲取zip檔名(包括完整路徑)

print zipfiles.filename

# 法1:(使用檔案路徑直接讀取檔案內容)

text = zipfiles.read('python/python27/testproject/hello.py').decode('utf-8')

print(text)

# 獲取hello.py檔案(通過壓縮檔案路徑加檔名獲得,

# 注意路徑是從開啟壓縮包的第乙個資料夾名稱算起,不包含壓縮包名字)

hellofile = zipfiles.getinfo('python/python27/testproject/hello.py')

# 法2:或通過剛剛獲取的hello.py檔案直接開啟讀取(先獲取檔案再讀內容)

text2 = zipfiles.open(hellofile).read()

print('-------------------------分隔符----------------------------')

print text2

# 迴圈讀取壓縮包下所有檔案內容與檔案名字

name = '' # 定義乙個name變數,用來記錄壓縮包裡的檔名

for i in zipfiles.namelist(): # for迴圈,in後面必須為序列,此時為檔名列表

name = i # i即是當前檔名

if name.find('.py') != -1: # 若果檔案中包含.py則繼續處理

print '檔案名字是:',name # 輸出檔名

print '檔案內容是:'

print zipfiles.read(name) # 輸出檔案內容(檔案的名即為在壓縮包中檔案對應的路徑)

print '---------next----------'

# 解壓檔案到指定路徑(若不指名路徑則會解壓到當前工作目錄)

zipfiles.extractall(r'd:\python\python27\backuptestproject'+os.sep+time.strftime('%y%m%d'))

#壓縮資料夾

# 使用zipfile('壓縮包完整路徑')方法獲得壓縮檔案

zipfiles1=zipfile.zipfile(r'd:\python\python27\backuptestproject\20180719\test.zip','w') # 指定壓縮包生成路徑與名字,使用引數'w'當壓縮包不存在時則建立新的;若存在則覆蓋

# os.walk(r'd:\python\python27\testproject')會遞迴查詢,遍歷所有入參目錄下資料夾,取出所有檔案

for current_path, subfolders, filesname in os.walk(r'd:\python\python27\testproject'): # 使用此形式可以獲得當前路徑current_path(當前路徑為walk引數的路徑,當引數路徑下有資料夾時,當前路徑會轉為引數路徑下的資料夾處截止),當前路徑下的子目錄subfolders,當前目錄下檔名filesname

print filesname

for file in filesname:

zipfiles1.write(os.path.join(current_path, file)) # 檔案壓縮,壓縮路徑為引數路徑

zipfiles.close() # 使用之後要關閉zipfile

方法二:通過呼叫系統zip命令實現檔案備份(壓縮)

# -*- coding:utf8 -*-

# !/usr/bin/python

# filename: backup_ver1.py

# 備份檔案

import os

import time

# 1. 需要備份的路徑(生成的壓縮包會保持此路徑結構)

source = r'd:\python\python27\testproject'

# if you are using windows, use source = [r'c:\documents', r'd:\work'] or something like that

# 2. 想要儲存備份的主目錄

target_dir = r'd:\python\python27\backuptestproject' # remember to change this to what you will be using

# 如果目標目錄還不存在,則進行建立

if not os.path.exists(target_dir):

os.mkdir(target_dir)

# 建立當天的資料夾(資料夾路徑為:備份主目錄下生成當天年月日命名的資料夾),如果當天命名的資料夾不存在,則新建

today_dir = target_dir+os.sep+time.strftime('%y%m%d') # os.sep產生路徑分隔符。即在linux、unix下它是'/',在windows下它是'\\',而在mac os下它是':'。使用os.sep而非直接使用字元,會使我們的程式具有移植性,可以在上述這些系統下工作。

if not os.path.exists(today_dir):

os.mkdir(today_dir)

# 3. the files are backed up into a zip file.

# 4. 拼裝完整壓縮包資訊(路徑+壓縮包名+.zip字尾):

# 注意today_dir後面要追加\分割符(但是windows中\為轉義字元,所以要寫\\),如果不寫分隔符則會將最後的backuptestproject作為檔名的一部分

# target = today_dir +os.sep+ time.strftime('%h%m%s') + '.zip' # 目前的日期和時間,我們使用time.strftime()函式獲得

# 手工輸入字串,拼裝target路徑(若沒有輸入,則使用原來target;若輸入有值,則將值加入zip名稱中)

comment = raw_input('please enter comment -->')

if len(comment) == 0:

target = today_dir + os.sep + time.strftime('%h%m%s') + '.zip'

else:

target = today_dir + os.sep + time.strftime('%h%m%s') +\

'_'+comment.replace(' ','_')+ '.zip'

# 5. 拼裝 zip command 字串

zip_command = "zip -qr %s %s" % (target, source)

# run the backup

if os.system(zip_command) == 0: # os.system函式執行命令,就像在系統中執行命令一樣。系統執行zip命令,若執行成功會返回0

print 'successful backup to', target

else:

print 'backup failed'

# 輸出:改進版本二,提示輸入,將輸入的字串拼到zip名字裡,每次都在目標路徑下生成乙個年月日命名的資料夾,資料夾裡是時分秒命名的zip,此時更有層次感

python實現檔案的壓縮與解壓縮

shutil對壓縮包的處理是通過呼叫zipfile和tarfile兩個模組來進行的。對於zip檔案來說 import zipfile zipfile壓縮 z zipfile.zipfile ss.zip w zipfile.zip stored 打包,zipfile.zip stored是預設引數 ...

檔案壓縮與解壓

檔案的壓縮 1.讀取檔案的內容 2.統計每個字元出現的次數 int read while read bis.read 1 直至讀到檔案結束 arrays為運算元組的工具類 collections為操作集合工具類 bis.close 3.構建哈弗曼樹,生成哈夫曼編碼 if node.getleftno...

檔案壓縮與解壓

檔案壓縮與解壓思想 1 統計字元出現次數,結合最小堆的性質生成哈夫曼樹 2 對葉節點進行編碼,結點左邊編 0,右邊編1 3 讀取檔案,用哈夫曼編碼代替字元產生新的字元,即壓縮 4 讀取壓縮檔案,進行哈夫曼編碼的解讀產生相應字元,即解壓 例如,對以下資料生成哈夫曼樹,以及產生相應的哈夫曼編碼 自己寫的...