<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python壓縮和解壓縮實現代碼分享

馬哥Linux運維 ? 來源:cnblogs ? 2024-04-11 11:28 ? 次閱讀

壓縮和解壓縮是日常常用的操作,不管是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

    文章

    11017

    瀏覽量

    206956
  • WINDOWS
    +關注

    關注

    3

    文章

    3464

    瀏覽量

    87312
  • 代碼
    +關注

    關注

    30

    文章

    4569

    瀏覽量

    67062
  • python
    +關注

    關注

    52

    文章

    4697

    瀏覽量

    83591

原文標題:Python實現壓縮和解壓縮

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Linux中常用的壓縮和解壓縮命令介紹

    在Linux中,壓縮和解壓縮文件是常見的操作。有時候,我們需要將大文件壓縮成較小的文件,以便于傳輸和存儲。同時,我們也需要解壓縮文件來獲得原始數據。本文咱們就介紹在Linux中常用的
    發表于 07-31 11:50 ?2103次閱讀

    A u率壓縮解壓縮

    A u率壓縮解壓縮# # A率/u率 壓縮解壓縮的IP核,。# 由AHDL語言寫成,可在MaxplusII和QuartusII中使用,源代碼
    發表于 08-10 18:12

    基于FPGA的高性能無損數據解壓縮IP

    LZOAccel-DLZO Data Decompression CoreLZOAccel-D是一個無損數據解壓縮引擎的FPGA硬件實現,兼容LZO 2.10標準。Core接收壓縮的輸入數據塊,產生
    發表于 12-21 23:12

    Ubuntu壓縮解壓縮的相關資料分享

    文章目錄簡介目標參考資料閱讀基礎環境說明參考資料圖形化壓縮解壓縮壓縮解壓縮命令行壓縮解壓縮命令
    發表于 02-11 06:48

    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 ?599次閱讀

    基于小波理論實時壓縮解壓縮芯片ADV611實現實時監控的方法

    為了使視頻圖像獲得較好的主觀效果,視頻信號壓縮方案的選擇尤為重要。美國AD公司新推出的基于小波理論實時壓縮解壓縮芯片ADV611能較好地實行視頻信號壓縮,用該芯片
    發表于 08-11 08:53 ?1008次閱讀
    基于小波理論實時<b class='flag-5'>壓縮</b><b class='flag-5'>解壓縮</b>芯片ADV611<b class='flag-5'>實現</b>實時監控的方法

    基于解壓縮電路的多掃描鏈測試

    本內容詳細介紹了基于解壓縮電路的多掃描鏈測試
    發表于 06-28 17:04 ?29次下載
    基于<b class='flag-5'>解壓縮</b>電路的多掃描鏈測試

    基于Camera Link接口的圖像壓縮解壓縮系統設計

    本設計名為CDIC(基于Camera Link接口的圖像壓縮解壓縮)系統,應用了Altera公司的StratixTMII系列FPGA EP2S30F484I5芯片和基于Camera Link接口的數碼相機CV-A10CL,設計實現
    發表于 11-10 15:04 ?41次下載
    基于Camera Link接口的圖像<b class='flag-5'>壓縮</b><b class='flag-5'>解壓縮</b>系統設計

    C#教程之批量解壓縮

    C#教程之批量解壓縮,很好的C#資料,快來學習吧。
    發表于 04-20 14:46 ?13次下載

    解壓縮軟件

    解壓縮軟件
    發表于 02-15 23:52 ?12次下載

    第1期Ubuntu入門篇:【10】Ubuntu下壓縮解壓縮

    文章目錄簡介目標參考資料閱讀基礎環境說明參考資料圖形化壓縮解壓縮壓縮解壓縮命令行壓縮解壓縮命令
    發表于 12-07 18:06 ?13次下載
    第1期Ubuntu入門篇:【10】Ubuntu下<b class='flag-5'>壓縮</b>與<b class='flag-5'>解壓縮</b>

    暴力破解壓縮包密碼

    可以暴力破解壓縮包密碼
    發表于 08-08 14:23 ?9次下載

    高性能無損數據解壓縮FPGA IP,LZO無損數據解壓縮IP

    LZOAccel-D是一個無損數據解壓縮引擎的FPGA硬件實現,兼容LZO 2.10標準。 Core接收壓縮的輸入數據塊,產生解壓縮后的數據塊。Core分析數據塊的頭和尾,檢查輸入數
    的頭像 發表于 02-25 09:59 ?129次閱讀
    高性能無損數據<b class='flag-5'>解壓縮</b>FPGA IP,LZO無損數據<b class='flag-5'>解壓縮</b>IP
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>