壓縮和解壓縮是日常常用的操作,不管是windows上圖形界面的操作,還是linux上用命令來進行壓縮解壓縮,總的而言都還是比較方便的。
但用代碼來實現就沒做過,近期也得實現代碼壓縮與解壓縮操作,所以就抽時間來研究一下。
一、zip文件壓縮和解壓縮實現
import os import zipfile # 函數功能是zip_file_list所有文件,和zip_dir_list所有目錄下的所有文件,被壓縮到一個zip_file_name的壓縮文件中 def my_zip_function(zip_file_name, zip_file_list=[], zip_dir_list=[]): # 壓縮文件最后需要close,為了方便我們直接用with with zipfile.ZipFile(zip_file_name, "w") as zip_obj: # 壓縮文件 for tmp_file in zip_file_list: zip_obj.write(tmp_file) # 壓縮目錄 for tmp_dir in zip_dir_list: # zipfile沒有直接壓縮目錄的功能,要壓縮目錄只能遍歷目錄一個一個文件壓。 for root, dirs, files in os.walk(tmp_dir): # 如果想要目錄為空時仍將該目錄壓縮進去,該目錄也要壓縮一遍;反之請將以下行注釋掉 zip_obj.write(root) for tmp_file in files: # 拼接文件完整目錄,不然只用文件名代碼找不到文件 tmp_file_path = os.path.join(root, tmp_file) zip_obj.write(tmp_file_path) # 函數功能是遍歷壓縮文件中的所有文件 def my_traversal_zip_function(zip_file_name): with zipfile.ZipFile(zip_file_name, "r") as zip_obj: # 返回結果是一個ZipInfo列表 # 如果在壓縮時顯示壓縮目錄,則目錄也作為一個單獨的ZipInfo呈現在列表中;反之則沒有目錄的ZipInfo all_file_list = zip_obj.infolist() for tmp_file in all_file_list: print(tmp_file.filename) # 還可以在不解壓的情況下直接讀取文件的內容 # 可以通過ZipInfo.is_dir()來區分是文件還是目錄 # if not tmp_file.is_dir(): # with zip_obj.open(tmp_file) as zip_fd: # print(zip_fd.read()) # 函數的功能是將壓縮文件直接解壓 def my_unzip_function(zip_file_name, path="."): with zipfile.ZipFile(zip_file_name, "r") as zip_obj: zip_obj.extractall(path=path) if __name__ == "__main__": zip_file_name = "test_zip.zip" # 自己在測試時要先自行創建好要壓縮的文件和目錄 zip_file_list = ["test_tar_file1.txt", "test_tar_file2.txt"] zip_dir_list = ["test_tar_dir"] my_zip_function(zip_file_name, zip_file_list, zip_dir_list) my_traversal_zip_function(zip_file_name) # my_unzip_function(zip_file_name, path=".")
二、tar文件的壓縮與解壓縮實現
除了直接的.tar文件,還包括.tar.gz/.tar.bz2/.tar.xz等格式文件的壓縮與解壓縮實現。
import os import tarfile # 函數功能是tar_file_list所有文件,和tar_dir_list所有目錄下的所有文件,被壓縮到一個tar_file_name的壓縮文件中 def my_tar_function(tar_file_name, tar_file_list=[], tar_dir_list=[], model="w"): # 本來也應該是tarfile.TarFile(tar_file_name, model)來創建的,但TarFile不支持"r:gz"等擴展形式 # 壓縮文件最后需要close,為了方便我們直接用with with tarfile.open(tar_file_name, model) as tar_obj: # 壓縮文件 for tmp_file in tar_file_list: tar_obj.add(tmp_file) # 壓縮目錄。和zipfile相比tarfile允許直接壓縮目錄,而不需要去遍歷目錄一個個文件壓 for tmp_dir in tar_dir_list: tar_obj.add(tmp_dir) # 函數功能是遍歷壓縮文件中的所有文件 def my_traversal_tar_function(tar_file_name, model="r"): with tarfile.open(tar_file_name, model) as tar_obj: # 返回結果是一個TarInfo列表 all_file_list = tar_obj.getmembers() for tmp_file in all_file_list: print(tmp_file.name) # 還可以在不解壓的情況下直接讀取文件的內容 # 可以通過TarInfo.isdir()來區分是文件還是目錄 # if not tmp_file.isdir(): # # 相當于zip的open,并不會把文件給解壓出來 # tar_fd = tar_obj.extractfile(tmp_file) # print(tar_fd.read()) # 函數的功能是將壓縮文件直接解壓 def my_untar_function(tar_file_name, path=".", model="r"): with tarfile.open(tar_file_name, model) as tar_obj: tar_obj.extractall(path=path) #學習中遇到問題沒人解答?小編創建了一個Python學習交流群:153708845 if __name__ == "__main__": # 自己在測試時要先自行創建好要壓縮的文件和目錄 tar_file_list = ["test_tar_file1.txt", "test_tar_file2.txt"] tar_dir_list = ["test_tar_dir"] tar_file_name = "test_tar.tar" # 在.tar基礎上,tarfile還支持gz/bz2/xz的壓縮,只要在原來打開模式的基礎上使用:或|接上壓縮方法即可,如"r:gz" # 特別的,如果是讀取文件,可以使用"r:*"來指示嘗試以任意格式讀取 open_model = "w" # open_model = "w:gz" my_tar_function(tar_file_name, tar_file_list, tar_dir_list, model=open_model) open_model = "r" # open_model = "r:*" my_traversal_tar_function(tar_file_name, model=open_model) # open_model = "r:*" # my_untar_function(tar_file_name, path=".", model=open_model)
審核編輯:黃飛
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
Linux
+關注
關注
87文章
11123瀏覽量
207919 -
WINDOWS
+關注
關注
3文章
3503瀏覽量
87889 -
代碼
+關注
關注
30文章
4671瀏覽量
67770 -
python
+關注
關注
53文章
4753瀏覽量
84081
原文標題:Python實現壓縮和解壓縮
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
Linux中常用的壓縮和解壓縮命令介紹
在Linux中,壓縮和解壓縮文件是常見的操作。有時候,我們需要將大文件壓縮成較小的文件,以便于傳輸和存儲。同時,我們也需要解壓縮文件來獲得原始數據。本文咱們就介紹在Linux中常用的
發表于 07-31 11:50
?2170次閱讀
基于FPGA的高性能無損數據解壓縮IP
LZOAccel-DLZO Data Decompression CoreLZOAccel-D是一個無損數據解壓縮引擎的FPGA硬件實現,兼容LZO 2.10標準。Core接收壓縮的輸入數據塊,產生
發表于 12-21 23:12
MPEG4解壓縮代碼
MPEG4解壓縮代碼 * This code has been developed by Andrea Graziani. This software is an  
發表于 10-30 14:26
?45次下載
VRV解壓縮軟件
VRV解壓縮軟件:VRV解壓縮軟件WinRAR is a powerful archiver. It provides complete support of RAR and ZIP files unpacking of ARJ CAB LZH ACE
發表于 03-15 12:32
?38次下載
Samplify推出新版Prism 壓縮/解壓縮技術
Samplify推出新版Prism 壓縮/解壓縮技術
? 賽靈思聯盟合作伙伴,混合信號半導體和 IP 信號壓縮廠商 Samplify Systems 公司現已推出面向 FPGA 實施的 Prism
發表于 02-08 10:12
?614次閱讀
基于小波理論實時壓縮解壓縮芯片ADV611實現實時監控的方法
為了使視頻圖像獲得較好的主觀效果,視頻信號壓縮方案的選擇尤為重要。美國AD公司新推出的基于小波理論實時壓縮解壓縮芯片ADV611能較好地實行視頻信號壓縮,用該芯片
發表于 08-11 08:53
?1064次閱讀
基于Camera Link接口的圖像壓縮解壓縮系統設計
本設計名為CDIC(基于Camera Link接口的圖像壓縮解壓縮)系統,應用了Altera公司的StratixTMII系列FPGA EP2S30F484I5芯片和基于Camera Link接口的數碼相機CV-A10CL,設計實現
發表于 11-10 15:04
?41次下載
第1期Ubuntu入門篇:【10】Ubuntu下壓縮與解壓縮
文章目錄簡介目標參考資料閱讀基礎環境說明參考資料圖形化壓縮解壓縮壓縮解壓縮命令行壓縮解壓縮命令
發表于 12-07 18:06
?13次下載
高性能無損數據解壓縮FPGA IP,LZO無損數據解壓縮IP
LZOAccel-D是一個無損數據解壓縮引擎的FPGA硬件實現,兼容LZO 2.10標準。
Core接收壓縮的輸入數據塊,產生解壓縮后的數據塊。Core分析數據塊的頭和尾,檢查輸入數
評論