python tarfile壓縮包操作保姆級(jí)教程
前言
上次寫博客還在去年的8月底了,期間有了小寶,換工作等諸多事宜讓我踩坑采的起飛,時(shí)隔4個(gè)月,逐漸找回狀態(tài)。這篇的主題是python的第三方庫(kù)zipfile
,因工作中要處理大量的壓縮包zip文件,所以趁著自由時(shí)間整理輸出下,以提高下工作的愉悅感。
1、tarfile
這個(gè)工具可以幫我們解決 zip 壓縮包的創(chuàng)建、讀取、寫入、添加、列出內(nèi)部所有的成員。更高效的處理壓縮包,已達(dá)到快速處理數(shù)據(jù)的目的。
入口1:tarfile.open(name=“sample.zip”)
tar = tarfile.open(name="sample.zip")
,針對(duì)路徑名 name 返回 TarFile 對(duì)象。這個(gè)對(duì)象可以用來(lái)解壓所有、解壓出其中符合規(guī)則的文件、添加、寫入等。
import tarfile tar = tarfile.open("sample.zip") # or tar = tarfile.open("sample.tar.gz") tar.extractall() tar.close()
入口2:tarfile.is_tarfile(name)
tarfile.is_tarfile(name)
,判斷文件是不是tar包,name為文件的路徑
import tarfile if tarfile.is_tarfile("./tartest/tar_1.tar"): print(1)
2、處理 open 后的 TarFile 對(duì)象
TarFile 對(duì)象可在 with 語(yǔ)句中作為上下文管理器使用。 當(dāng)語(yǔ)句塊結(jié)束時(shí)它將自動(dòng)被關(guān)閉。tarfile對(duì)象主要用來(lái):
- 生成歸檔的成員name
- 生成歸檔的成員 tarnifo 對(duì)象
- 判斷某文件在不在歸檔中
- 將歸檔成員的相信信息打到界面上
- 解壓整個(gè)tar包到指定目錄
- 解壓tar包的某個(gè)文件到指定目錄
- 將歸檔中的一個(gè)成員提取為文件tarinfo對(duì)象
- 將指定目錄下的 jiao.txt 壓縮到指定目錄下的 tar 包,tar不存在則新建一個(gè),存在,則替換里面的內(nèi)容
import tarfile # if tarfile.is_tarfile("./tartest/tar_1.tar"): # print(1) tar = tarfile.open("./tartest/tar_1.tar") print("以 tarinfo 返回歸檔的成員:", tar.getmembers()) # 以 tarinfo 返回歸檔的成員: [<TarInfo 'tar_1' at 0x1a74e3c57c0>, <TarInfo 'tar_1/jiao.txt' at 0x1a74e3c5e80>] print("以 名稱 返回歸檔的成員:", tar.getnames()) # 以 名稱 返回歸檔的成員: ['tar_1', 'tar_1/jiao.txt'] print("如果name在歸檔中找到,則返回True", tar.getmember(name = "tar_1/jiao.txt")) # 如果name在歸檔中找到,則返回True <TarInfo 'tar_1/jiao.txt' at 0x1a74e3c5e80> if tar.getmember(name="tar_1/jiao.txt"): print("找到了") print("【將內(nèi)容清單打印到 sys.stdout】", tar.list()) """ ?rwxrwxrwx 0/0 0 2023-02-03 23:37:40 tar_1/ ?rwxrwxrwx 0/0 15 2023-02-03 23:37:56 tar_1/jiao.txt """ tar.extractall(path="./new_tar_file/") # 當(dāng)前目錄下生成目錄 new_tar_file tar.extract(member="tar_1/jiao.txt", path="./new_tar_file1/") # 從歸檔中提取出一個(gè)成員放入指定目錄,默認(rèn)當(dāng)前目錄。大多數(shù)情況下使用 extractall() print("【將歸檔中的一個(gè)成員提取為文件對(duì)象】", tar.extractfile(member="tar_1/jiao.txt")) # 【將歸檔中的一個(gè)成員提取為文件對(duì)象】 <ExFileObject name='./tartest/tar_1.tar'> # 將當(dāng)前目錄下的 jiao.txt 壓縮到指定目錄下的 tar 包,tar不存在則新建一個(gè),存在,則替換里面的內(nèi)容 tar1 = tarfile.open(name="./tartest/tar_3.tar", mode="w|") tar1.add(name="./jiao.txt") tar1.close() # 關(guān)閉 tarfile 對(duì)象 # 暫不清楚的 """ tar.addfile() 將 TarInfo 對(duì)象 tarinfo 添加到歸檔 tar.gettarinfo() 基于 os.stat() 的結(jié)果或者現(xiàn)有文件的相同數(shù)據(jù)創(chuàng)建一個(gè) TarInfo """
3、處理2中返回的 TarInfo 對(duì)象
TarInfo 對(duì)象代表 TarFile 中的一個(gè)文件,除了會(huì)存儲(chǔ)所有必要的文件屬性(例如文件類型、大小、時(shí)間、權(quán)限、所有者等),它還提供了一些確定文件類型的有用方法。 此對(duì)象 并不 包含文件數(shù)據(jù)本身(意思你拿不到txt文本里面的數(shù)據(jù))。
import tarfile tar = tarfile.open("./tartest/tar_1.tar") tarinfos = tar.getmembers() for tarinfo in tarinfos: print("基于 TarInfo 對(duì)象創(chuàng)建一個(gè)字符串緩沖區(qū)", i.tobuf()) print(tarinfo.name, "tar包成員的名稱") print(tarinfo.size, "tar包成員的大小") print(tarinfo.mtime, "上次修改的時(shí)間") print(tarinfo.mode, "權(quán)限位") print(tarinfo.type, "文件類型") print(tarinfo.linkname, "目標(biāo)文件名的名稱,該屬性僅在類型為 LNKTYPE 和 SYMTYPE 的 TarInfo 對(duì)象中存在") print(tarinfo.uid, tarinfo.gid, tarinfo.uname, tarinfo.gname) if tarinfo.isfile(): print("如果 Tarinfo 對(duì)象為普通文件則返回 True") if tarinfo.isdir(): print("如果為目錄則返回 True") if tarinfo.issym(): print("如果為符號(hào)鏈接則返回 True") if tarinfo.islnk(): print("如果為硬鏈接則返回 True") # 還有其他不常用的,不深入研究了
4、示例
如何將整個(gè) tar 歸檔提取到當(dāng)前工作目
import tarfile tar = tarfile.open("sample.tar.gz") tar.extractall() tar.close()
如何通過(guò) TarFile.extractall()
使用生成器函數(shù)而非列表來(lái)提取一個(gè) tar包成員的子集
import os import tarfile def py_files(members): for tarinfo in members: # os.path.splitext(路徑) 用來(lái)分離文件名與拓展名 if os.path.splitext(tarinfo.name)[1] == ".sql": yield tarinfo tar = tarfile.open("sample.tar.gz") tar.extractall(members=py_files(tar)) tar.close()
將一堆文件壓縮成tar包:
import tarfile tar = tarfile.open("sample.tar", "w") for name in ["foo.txt", "bar.txt", "quux.txt"]: tar.add(name) tar.close()
使用 with 語(yǔ)句將一堆文件壓縮成tar包
import tarfile with tarfile.open("sample.tar", "w") as tar: for name in ["foo", "bar", "quux"]: tar.add(name)
讀取一個(gè) gzip 壓縮的 tar 包并顯示一些成員信息
import tarfile tar = tarfile.open("sample.tar.gz", "r:gz") for tarinfo in tar: print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="") if tarinfo.isreg(): print("a regular file.") elif tarinfo.isdir(): print("a directory.") else: print("something else.") tar.close()
創(chuàng)建一個(gè)歸檔并使用 TarFile.add()
中的 filter
形參來(lái)重置用戶信息
import tarfile def reset(tarinfo): tarinfo.uid = tarinfo.gid = 0 tarinfo.uname = tarinfo.gname = "root" return tarinfo tar = tarfile.open("sample.tar.gz", "w:gz") tar.add("foo", filter=reset) tar.close()
到此這篇關(guān)于python tarfile壓縮包操作保姆級(jí)教程的文章就介紹到這了,更多相關(guān)python tarfile內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 淺析Python中壓縮zipfile與解壓縮tarfile模塊的使用
- python標(biāo)準(zhǔn)庫(kù)壓縮包模塊zipfile和tarfile詳解(常用標(biāo)準(zhǔn)庫(kù))
- Python標(biāo)準(zhǔn)庫(kù)之zipfile和tarfile模塊的使用
- Python中使用tarfile壓縮、解壓tar歸檔文件示例
- Python實(shí)現(xiàn)批量壓縮解壓文件(zip、rar)
- python 實(shí)現(xiàn)tar文件壓縮解壓的實(shí)例詳解
- Python壓縮解壓縮zip文件及破解zip文件密碼的方法
- Python使用tarfile模塊實(shí)現(xiàn)免費(fèi)壓縮解壓
相關(guān)文章
Python實(shí)現(xiàn)PowerPoint演示文稿到圖片的批量轉(zhuǎn)換
PowerPoint演示文稿作為展示創(chuàng)意、分享知識(shí)和表達(dá)觀點(diǎn)的重要工具,被廣泛應(yīng)用于教育、商務(wù)匯報(bào)及個(gè)人項(xiàng)目展示等領(lǐng)域,用Python代碼可以高效地實(shí)現(xiàn)PowerPoint演示文稿到圖片的批量轉(zhuǎn)換,從而提升工作效率,文本將介紹如何使用Python實(shí)現(xiàn)PowerPoint演示文稿到圖片的轉(zhuǎn)換2024-06-06DRF之請(qǐng)求與響應(yīng)的實(shí)現(xiàn)
本文主要介紹了DRF請(qǐng)求與響應(yīng)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-07-07pyqt5教程QGraphicsScene及QGraphicsView使用基礎(chǔ)
這篇文章主要為大家介紹了pyqt5教程中QGraphicsScene及QGraphicsView使用基礎(chǔ),有序要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10Python基于opencv的簡(jiǎn)單圖像輪廓形狀識(shí)別(全網(wǎng)最簡(jiǎn)單最少代碼)
這篇文章主要介紹了基于opencv的簡(jiǎn)單圖像輪廓形狀識(shí)別(全網(wǎng)最簡(jiǎn)單最少代碼),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01python爬蟲中g(shù)et和post方法介紹以及cookie作用
本篇文章通過(guò)爬取163郵箱實(shí)例介紹了python爬蟲中g(shù)et和post方法介紹以及cookie作用,對(duì)此有興趣的朋友學(xué)習(xí)下。2018-02-02python測(cè)試框架unittest和pytest區(qū)別
這篇文章主要介紹了python測(cè)試框架unittest和pytest區(qū)別,幫助大家更好的理解和學(xué)習(xí)使用python進(jìn)行自動(dòng)化測(cè)試,感興趣的朋友可以了解下2021-04-04python中實(shí)現(xiàn)字符串翻轉(zhuǎn)的方法
這篇文章主要介紹了python中實(shí)現(xiàn)字符串翻轉(zhuǎn)的方法,代碼很簡(jiǎn)單,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07