欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

上次寫博客還在去年的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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實(shí)現(xiàn)PowerPoint演示文稿到圖片的批量轉(zhuǎ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-06
  • DRF之請(qǐng)求與響應(yīng)的實(shí)現(xiàn)

    DRF之請(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-07
  • Python爬蟲爬取新聞資訊案例詳解

    Python爬蟲爬取新聞資訊案例詳解

    這篇文章主要介紹了Python爬蟲爬取新聞資訊案例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • pyqt5教程QGraphicsScene及QGraphicsView使用基礎(chǔ)

    pyqt5教程QGraphicsScene及QGraphicsView使用基礎(chǔ)

    這篇文章主要為大家介紹了pyqt5教程中QGraphicsScene及QGraphicsView使用基礎(chǔ),有序要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • Python基于opencv的簡(jiǎn)單圖像輪廓形狀識(shí)別(全網(wǎng)最簡(jiǎn)單最少代碼)

    Python基于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-01
  • python爬蟲中g(shù)et和post方法介紹以及cookie作用

    python爬蟲中g(shù)et和post方法介紹以及cookie作用

    本篇文章通過(guò)爬取163郵箱實(shí)例介紹了python爬蟲中g(shù)et和post方法介紹以及cookie作用,對(duì)此有興趣的朋友學(xué)習(xí)下。
    2018-02-02
  • 解決python列表list中的截取問(wèn)題

    解決python列表list中的截取問(wèn)題

    這篇文章主要介紹了解決python列表list中的截取問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python中的字典使用分享

    python中的字典使用分享

    Python 中的字典是Python中一個(gè)鍵值映射的數(shù)據(jù)結(jié)構(gòu),下面介紹一下如何操作字典,希望大家能夠喜歡
    2016-07-07
  • python測(cè)試框架unittest和pytest區(qū)別

    python測(cè)試框架unittest和pytest區(qū)別

    這篇文章主要介紹了python測(cè)試框架unittest和pytest區(qū)別,幫助大家更好的理解和學(xué)習(xí)使用python進(jìn)行自動(dòng)化測(cè)試,感興趣的朋友可以了解下
    2021-04-04
  • python中實(shí)現(xiàn)字符串翻轉(zhuǎn)的方法

    python中實(shí)現(xiàn)字符串翻轉(zhuǎn)的方法

    這篇文章主要介紹了python中實(shí)現(xiàn)字符串翻轉(zhuǎn)的方法,代碼很簡(jiǎn)單,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07

最新評(píng)論