在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python壓縮和解壓縮實(shí)現(xiàn)代碼分享

馬哥Linux運(yùn)維 ? 來(lái)源:cnblogs ? 2024-04-11 11:28 ? 次閱讀

壓縮和解壓縮是日常常用的操作,不管是windows上圖形界面的操作,還是linux上用命令來(lái)進(jìn)行壓縮解壓縮,總的而言都還是比較方便的。

但用代碼來(lái)實(shí)現(xiàn)就沒(méi)做過(guò),近期也得實(shí)現(xiàn)代碼壓縮與解壓縮操作,所以就抽時(shí)間來(lái)研究一下。

一、zip文件壓縮和解壓縮實(shí)現(xiàn)

import os
import zipfile


# 函數(shù)功能是zip_file_list所有文件,和zip_dir_list所有目錄下的所有文件,被壓縮到一個(gè)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沒(méi)有直接壓縮目錄的功能,要壓縮目錄只能遍歷目錄一個(gè)一個(gè)文件壓。
            for root, dirs, files in os.walk(tmp_dir):
                # 如果想要目錄為空時(shí)仍將該目錄壓縮進(jìn)去,該目錄也要壓縮一遍;反之請(qǐng)將以下行注釋掉
                zip_obj.write(root)
                for tmp_file in files:
                    # 拼接文件完整目錄,不然只用文件名代碼找不到文件
                    tmp_file_path = os.path.join(root, tmp_file)
                    zip_obj.write(tmp_file_path)


# 函數(shù)功能是遍歷壓縮文件中的所有文件
def my_traversal_zip_function(zip_file_name):
    with zipfile.ZipFile(zip_file_name, "r") as zip_obj:
        # 返回結(jié)果是一個(gè)ZipInfo列表
        # 如果在壓縮時(shí)顯示壓縮目錄,則目錄也作為一個(gè)單獨(dú)的ZipInfo呈現(xiàn)在列表中;反之則沒(méi)有目錄的ZipInfo
        all_file_list = zip_obj.infolist()
        for tmp_file in all_file_list:
            print(tmp_file.filename)
            # 還可以在不解壓的情況下直接讀取文件的內(nèi)容
            # 可以通過(guò)ZipInfo.is_dir()來(lái)區(qū)分是文件還是目錄
            # if not tmp_file.is_dir():
            #     with zip_obj.open(tmp_file) as zip_fd:
            #         print(zip_fd.read())


# 函數(shù)的功能是將壓縮文件直接解壓
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"
    # 自己在測(cè)試時(shí)要先自行創(chuàng)建好要壓縮的文件和目錄
    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文件的壓縮與解壓縮實(shí)現(xiàn)

除了直接的.tar文件,還包括.tar.gz/.tar.bz2/.tar.xz等格式文件的壓縮與解壓縮實(shí)現(xiàn)。

import os
import tarfile


# 函數(shù)功能是tar_file_list所有文件,和tar_dir_list所有目錄下的所有文件,被壓縮到一個(gè)tar_file_name的壓縮文件中
def my_tar_function(tar_file_name, tar_file_list=[], tar_dir_list=[], model="w"):
    # 本來(lái)也應(yīng)該是tarfile.TarFile(tar_file_name, model)來(lái)創(chuàng)建的,但TarFile不支持"r:gz"等擴(kuò)展形式
    # 壓縮文件最后需要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允許直接壓縮目錄,而不需要去遍歷目錄一個(gè)個(gè)文件壓
        for tmp_dir in tar_dir_list:
            tar_obj.add(tmp_dir)


# 函數(shù)功能是遍歷壓縮文件中的所有文件
def my_traversal_tar_function(tar_file_name, model="r"):
    with tarfile.open(tar_file_name, model) as tar_obj:
        # 返回結(jié)果是一個(gè)TarInfo列表
        all_file_list = tar_obj.getmembers()
        for tmp_file in all_file_list:
            print(tmp_file.name)
            # 還可以在不解壓的情況下直接讀取文件的內(nèi)容
            # 可以通過(guò)TarInfo.isdir()來(lái)區(qū)分是文件還是目錄
            # if not tmp_file.isdir():
            #     # 相當(dāng)于zip的open,并不會(huì)把文件給解壓出來(lái)
            #     tar_fd = tar_obj.extractfile(tmp_file)
            #     print(tar_fd.read())


# 函數(shù)的功能是將壓縮文件直接解壓
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)

#學(xué)習(xí)中遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流群:153708845
if __name__ == "__main__":
    # 自己在測(cè)試時(shí)要先自行創(chuàng)建好要壓縮的文件和目錄
    tar_file_list = ["test_tar_file1.txt", "test_tar_file2.txt"]
    tar_dir_list = ["test_tar_dir"]
    tar_file_name = "test_tar.tar"
    # 在.tar基礎(chǔ)上,tarfile還支持gz/bz2/xz的壓縮,只要在原來(lái)打開(kāi)模式的基礎(chǔ)上使用:或|接上壓縮方法即可,如"r:gz"
    # 特別的,如果是讀取文件,可以使用"r:*"來(lái)指示嘗試以任意格式讀取
    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)

審核編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11326

    瀏覽量

    209961
  • WINDOWS
    +關(guān)注

    關(guān)注

    4

    文章

    3553

    瀏覽量

    88986
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4808

    瀏覽量

    68808
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4801

    瀏覽量

    84858

原文標(biāo)題:Python實(shí)現(xiàn)壓縮和解壓縮

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

    在Linux中,壓縮和解壓縮文件是常見(jiàn)的操作。有時(shí)候,我們需要將大文件壓縮成較小的文件,以便于傳輸和存儲(chǔ)。同時(shí),我們也需要解壓縮文件來(lái)獲得原始數(shù)據(jù)。本文咱們就介紹在Linux中常用的
    發(fā)表于 07-31 11:50 ?2266次閱讀

    A u率壓縮解壓縮

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

    基于FPGA的高性能無(wú)損數(shù)據(jù)解壓縮IP

    LZOAccel-DLZO Data Decompression CoreLZOAccel-D是一個(gè)無(wú)損數(shù)據(jù)解壓縮引擎的FPGA硬件實(shí)現(xiàn),兼容LZO 2.10標(biāo)準(zhǔn)。Core接收壓縮的輸入數(shù)據(jù)塊,產(chǎn)生
    發(fā)表于 12-21 23:12

    Ubuntu壓縮解壓縮的相關(guān)資料分享

    文章目錄簡(jiǎn)介目標(biāo)參考資料閱讀基礎(chǔ)環(huán)境說(shuō)明參考資料圖形化壓縮解壓縮壓縮解壓縮命令行壓縮解壓縮命令
    發(fā)表于 02-11 06:48

    MPEG4解壓縮代碼

    MPEG4解壓縮代碼 * This code has been developed by Andrea Graziani. This software is an  
    發(fā)表于 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
    發(fā)表于 03-15 12:32 ?38次下載

    Samplify推出新版Prism 壓縮解壓縮技術(shù)

    Samplify推出新版Prism 壓縮解壓縮技術(shù) ? 賽靈思聯(lián)盟合作伙伴,混合信號(hào)半導(dǎo)體和 IP 信號(hào)壓縮廠商 Samplify Systems 公司現(xiàn)已推出面向 FPGA 實(shí)施的 Prism
    發(fā)表于 02-08 10:12 ?647次閱讀

    基于小波理論實(shí)時(shí)壓縮解壓縮芯片ADV611實(shí)現(xiàn)實(shí)時(shí)監(jiān)控的方法

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

    基于解壓縮電路的多掃描鏈測(cè)試

    本內(nèi)容詳細(xì)介紹了基于解壓縮電路的多掃描鏈測(cè)試
    發(fā)表于 06-28 17:04 ?32次下載
    基于<b class='flag-5'>解壓縮</b>電路的多掃描鏈測(cè)試

    C#教程之批量解壓縮

    C#教程之批量解壓縮,很好的C#資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-20 14:46 ?13次下載

    解壓縮軟件

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

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

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

    暴力破解壓縮包密碼

    可以暴力破解壓縮包密碼
    發(fā)表于 08-08 14:23 ?10次下載

    高性能無(wú)損數(shù)據(jù)解壓縮FPGA IP,LZO無(wú)損數(shù)據(jù)解壓縮IP

    LZOAccel-D是一個(gè)無(wú)損數(shù)據(jù)解壓縮引擎的FPGA硬件實(shí)現(xiàn),兼容LZO 2.10標(biāo)準(zhǔn)。 Core接收壓縮的輸入數(shù)據(jù)塊,產(chǎn)生解壓縮后的數(shù)據(jù)塊。Core分析數(shù)據(jù)塊的頭和尾,檢查輸入數(shù)
    的頭像 發(fā)表于 02-25 09:59 ?341次閱讀
    高性能無(wú)損數(shù)據(jù)<b class='flag-5'>解壓縮</b>FPGA IP,LZO無(wú)損數(shù)據(jù)<b class='flag-5'>解壓縮</b>IP

    如何使用gzip壓縮和解壓縮技術(shù)

    Nginx是一款高性能的Web服務(wù)器,它也能夠充當(dāng)反向代理服務(wù)器和負(fù)載均衡器。在Web應(yīng)用開(kāi)發(fā)中,優(yōu)化網(wǎng)站速度是一個(gè)非常重要的工作。使用gzip壓縮和解壓縮技術(shù),可以有效減小傳輸文件的大小,提升網(wǎng)站的訪問(wèn)速度。
    的頭像 發(fā)表于 09-29 15:57 ?458次閱讀
    主站蜘蛛池模板: 伊人网成人| 亚洲成人在线网| tube69日本| 91精品福利久久久| 欧美巨大xxxx做受中文字幕| 69xxxx女人| 欧美亚洲综合图区在线| 99热.com| 特级毛片永久久免费观看| 入逼视频| 国产福利影视| 日本69av| 热99热| 最新地址四虎www4hutv| 婷婷六月综合网| 欧美婷婷色| 国产成人精品日本亚洲专| 亚洲高清资源| 久久天天躁夜夜躁狠狠85台湾| 98色花堂国产第一页| 午夜精品久久久久久久第一页 | 国内免费视频成人精品| 成人99国产精品| 三级免费网站| 日本免费一区二区老鸭窝| 精品无码中出一区二区| 成人欧美另类人妖| 就操| 俄罗斯美女69xxxxxx| 69xxxxtube日本免费| 综合aⅴ| 奇米米奇777| cijilu刺激 国产| 久操久操| 乱高h亲女| 日日噜噜噜夜夜爽爽狠狠视频 | 天堂网ww| 色多多免费观看在线| 久久综合九色综合欧洲| 亚洲网站色| 免费又黄又硬又大爽日本|