最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python tarfile壓縮包操作保姆級(jí)教程

 更新時(shí)間:2023年02月11日 08:38:38   作者:阿_焦  
TarFile類就是tar壓縮包,其由member塊組成, member塊則包括header塊和data塊. 每個(gè)member以TarInfo對(duì)象形式描述. 所以TarFile就是TarInfo的序列

前言

上次寫(xiě)博客還在去年的8月底了,期間有了小寶,換工作等諸多事宜讓我踩坑采的起飛,時(shí)隔4個(gè)月,逐漸找回狀態(tài)。這篇的主題是python的第三方庫(kù)zipfile,因工作中要處理大量的壓縮包zip文件,所以趁著自由時(shí)間整理輸出下,以提高下工作的愉悅感。

1、tarfile

這個(gè)工具可以幫我們解決 zip 壓縮包的創(chuàng)建、讀取、寫(xiě)入、添加、列出內(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ī)則的文件、添加、寫(xiě)入等。

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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python操作Excel之xlsx文件

    Python操作Excel之xlsx文件

    前段時(shí)間做一個(gè)項(xiàng)目,不得不使用Python直接生成Excel文件,后來(lái)隨著需求的變化,還要對(duì)已有的Excel文件進(jìn)行讀取。所以想著記錄下來(lái),這篇文章主要給大家介紹了Python操作Excel之xlsx文件的相關(guān)資料,需要的朋友可以參考下。
    2017-03-03
  • tensorboard 可視化之localhost:6006不顯示的解決方案

    tensorboard 可視化之localhost:6006不顯示的解決方案

    這篇文章主要介紹了tensorboard 可視化之localhost:6006不顯示的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python 自動(dòng)備份腳本的示例代碼

    Python 自動(dòng)備份腳本的示例代碼

    這篇文章主要介紹了Python 自動(dòng)備份腳本,本文結(jié)合代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • Tensorflow2.1實(shí)現(xiàn)文本中情感分類實(shí)現(xiàn)解析

    Tensorflow2.1實(shí)現(xiàn)文本中情感分類實(shí)現(xiàn)解析

    這篇文章主要為大家介紹了Tensorflow2.1實(shí)現(xiàn)文本中情感分類實(shí)現(xiàn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 解析Python編程中的包結(jié)構(gòu)

    解析Python編程中的包結(jié)構(gòu)

    這篇文章主要介紹了解析Python編程中的包結(jié)構(gòu),包括對(duì)一些包管理工具的介紹,需要的朋友可以參考下
    2015-10-10
  • 解決Python3.8運(yùn)行tornado項(xiàng)目報(bào)NotImplementedError錯(cuò)誤

    解決Python3.8運(yùn)行tornado項(xiàng)目報(bào)NotImplementedError錯(cuò)誤

    這篇文章主要介紹了Python3.8運(yùn)行tornado項(xiàng)目報(bào)NotImplementedError錯(cuò)誤,本文給大家分享解決方法,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Python適配器模式代碼實(shí)現(xiàn)解析

    Python適配器模式代碼實(shí)現(xiàn)解析

    這篇文章主要介紹了Python適配器模式代碼實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python發(fā)送byte數(shù)據(jù)組到tcp的server問(wèn)題

    python發(fā)送byte數(shù)據(jù)組到tcp的server問(wèn)題

    這篇文章主要介紹了python發(fā)送byte數(shù)據(jù)組到tcp的server問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Django admin管理工具TabularInline類用法詳解

    Django admin管理工具TabularInline類用法詳解

    這篇文章主要介紹了Django admin管理工具TabularInline類用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • python運(yùn)算符號(hào)詳細(xì)介紹

    python運(yùn)算符號(hào)詳細(xì)介紹

    大家好,本篇文章主要講的是python運(yùn)算符號(hào)詳細(xì)介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12

最新評(píng)論

三都| 黄龙县| 自治县| 张家界市| 双鸭山市| 安塞县| 遵义市| 广州市| 新化县| 灌南县| 临澧县| 兴山县| 达孜县| 内黄县| 内乡县| 太湖县| 那曲县| 舒城县| 镶黄旗| 拉萨市| 建昌县| 页游| 六枝特区| 海安县| 泾川县| 方正县| 财经| 洛阳市| 渭南市| 宁国市| 永仁县| 壶关县| 文山县| 称多县| 古田县| 梁平县| 玉溪市| 辽宁省| 荣成市| 娄底市| 诸城市|