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

使用Python解壓各種壓縮文件的代碼實(shí)現(xiàn)

 更新時(shí)間:2025年09月12日 08:51:22   作者:detayun  
本文介紹通過(guò)文件頭(Magic Number)識(shí)別壓縮類(lèi)型的方法,支持ZIP、TAR、GZ、BZ2、RAR、7Z等格式,需第三方庫(kù)輔助,并需處理路徑安全、大文件流式解壓及異常情況,實(shí)現(xiàn)更可靠的自動(dòng)解壓方案,需要的朋友可以參考下

在Python中,可以通過(guò)檢測(cè)文件特征自動(dòng)識(shí)別壓縮類(lèi)型并解壓。以下是實(shí)現(xiàn)方案:

核心原理

通過(guò)文件頭(Magic Number)判斷壓縮類(lèi)型,而非依賴(lài)文件擴(kuò)展名。支持格式包括:ZIP、TAR、GZ、BZ2、RAR、7Z等。

代碼實(shí)現(xiàn)

import os
import zipfile
import tarfile
import gzip
import bz2
import shutil

def detect_compression(file_path):
    """通過(guò)文件頭識(shí)別壓縮類(lèi)型"""
    with open(file_path, 'rb') as f:
        # ZIP文件檢測(cè)
        if f.read(4) == b'PK\x03\x04':
            return 'zip'
        # TAR文件檢測(cè)
        if f.read(261)[257:262] == b'ustar':
            return 'tar'
        # GZ文件檢測(cè)
        if f.read(2) == b'\x1f\x8b':
            return 'gz'
        # BZ2文件檢測(cè)
        if f.read(3) == b'BZh':
            return 'bz2'
    return 'unknown'

def extract_archive(archive_path, extract_to='.'):
    """自動(dòng)解壓函數(shù)"""
    comp_type = detect_compression(archive_path)
    
    # 根據(jù)類(lèi)型調(diào)用對(duì)應(yīng)解壓方法
    if comp_type == 'zip':
        with zipfile.ZipFile(archive_path, 'r') as zip_ref:
            zip_ref.extractall(extract_to)
    elif comp_type == 'tar':
        with tarfile.open(archive_path) as tar_ref:
            tar_ref.extractall(extract_to)
    elif comp_type == 'gz':
        with gzip.open(archive_path, 'rb') as gz_ref:
            with open(os.path.join(extract_to, os.path.basename(archive_path)[:-3]), 'wb') as out_file:
                shutil.copyfileobj(gz_ref, out_file)
    elif comp_type == 'bz2':
        with bz2.open(archive_path, 'rb') as bz2_ref:
            with open(os.path.join(extract_to, os.path.basename(archive_path)[:-4]), 'wb') as out_file:
                shutil.copyfileobj(bz2_ref, out_file)
    else:
        print(f"不支持的壓縮格式: {archive_path}")

# 使用示例
extract_archive('unknown_archive.xyz', './output')

特殊格式處理

對(duì)于RAR/7Z等格式,需安裝第三方庫(kù):

pip install rarfile py7zr

需在代碼中添加:

# 添加在detect_compression函數(shù)中
elif f.read(7) == b'Rar!\x1a\x07\x00':
    return 'rar'
elif f.read(6) == b'7z\x00\x00\x00\x00':
    return '7z'

# 添加在extract_archive函數(shù)中
elif comp_type == 'rar':
    from rarfile import RarFile
    with RarFile(archive_path) as rf:
        rf.extractall(extract_to)
elif comp_type == '7z':
    import py7zr
    with py7zr.SevenZipFile(archive_path) as z:
        z.extractall(extract_to)

注意事項(xiàng)

  1. 文件頭檢測(cè)比擴(kuò)展名更可靠
  2. 需處理路徑安全(避免路徑遍歷攻擊)
  3. 大文件建議使用流式解壓
  4. 異常處理需包含文件損壞、權(quán)限不足等情況

此方案可自動(dòng)識(shí)別常見(jiàn)壓縮格式,對(duì)于非常規(guī)格式可通過(guò)擴(kuò)展文件頭檢測(cè)邏輯實(shí)現(xiàn)支持。

到此這篇關(guān)于使用Python解壓各種壓縮文件的代碼實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python解壓各種壓縮文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python繪制散點(diǎn)密度圖的三種方式詳解

    Python繪制散點(diǎn)密度圖的三種方式詳解

    散點(diǎn)密度圖是在散點(diǎn)圖的基礎(chǔ)上,計(jì)算了每個(gè)散點(diǎn)周?chē)植剂硕嗌倨渌狞c(diǎn),并通過(guò)顏色表現(xiàn)出來(lái)。本文主要介紹了Python繪制散點(diǎn)密度圖的三種方式,需要的可以參考下
    2022-06-06
  • 使用PyCharm和venv進(jìn)行Python項(xiàng)目環(huán)境配置避坑指南

    使用PyCharm和venv進(jìn)行Python項(xiàng)目環(huán)境配置避坑指南

    在進(jìn)行 Python 項(xiàng)目開(kāi)發(fā)時(shí),一個(gè)干凈,隔離且配置正確的開(kāi)發(fā)環(huán)境至關(guān)重要,本文結(jié)合之前安裝 Vanna 庫(kù)時(shí)遇到的問(wèn)題,總結(jié)了使用 PyCharm 和 venv 進(jìn)行 Python 項(xiàng)目環(huán)境設(shè)置的最佳實(shí)踐和常見(jiàn)坑的解決方法,有需要的小伙伴可以參考下
    2025-04-04
  • python如何實(shí)現(xiàn)從視頻中提取每秒圖片

    python如何實(shí)現(xiàn)從視頻中提取每秒圖片

    這篇文章主要為大家詳細(xì)介紹了python如何實(shí)現(xiàn)從視頻中提取每秒圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • python實(shí)現(xiàn)自動(dòng)更換ip的方法

    python實(shí)現(xiàn)自動(dòng)更換ip的方法

    這篇文章主要介紹了python實(shí)現(xiàn)自動(dòng)更換ip的方法,涉及Python針對(duì)本機(jī)網(wǎng)絡(luò)配置的相關(guān)操作技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-05-05
  • Python面向?qū)ο蠓庋b繼承和多態(tài)示例講解

    Python面向?qū)ο蠓庋b繼承和多態(tài)示例講解

    這篇文章給大家介紹了python面向?qū)ο蟮娜筇卣鳎悍庋b,繼承,多態(tài)的相關(guān)知識(shí),通過(guò)實(shí)例代碼講解的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2021-04-04
  • python使用SimpleXMLRPCServer實(shí)現(xiàn)簡(jiǎn)單的rpc過(guò)程

    python使用SimpleXMLRPCServer實(shí)現(xiàn)簡(jiǎn)單的rpc過(guò)程

    這篇文章主要介紹了python使用SimpleXMLRPCServer實(shí)現(xiàn)簡(jiǎn)單的rpc過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Python入門(mén)教程(四十)Python的NumPy數(shù)組創(chuàng)建

    Python入門(mén)教程(四十)Python的NumPy數(shù)組創(chuàng)建

    這篇文章主要介紹了Python入門(mén)教程(四十)Python的NumPy數(shù)組創(chuàng)建,NumPy 用于處理數(shù)組,NumPy 中的數(shù)組對(duì)象稱(chēng)為 ndarray,我們可以使用 array() 函數(shù)創(chuàng)建一個(gè) NumPy ndarray 對(duì)象,需要的朋友可以參考下
    2023-05-05
  • Python制作動(dòng)態(tài)字符圖的實(shí)例

    Python制作動(dòng)態(tài)字符圖的實(shí)例

    今天小編就為大家分享一篇關(guān)于Python制作動(dòng)態(tài)字符圖的實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • Python?tkinter?列表框Listbox屬性詳情

    Python?tkinter?列表框Listbox屬性詳情

    這篇文章主要介紹了Python?tkinter?列表框Listbox屬性詳情,列表框控件顯示多行文本,用戶(hù)可以選中一行或者多行。所有的文本只能使用一種字體,不能混合使用多種字體
    2022-07-07
  • python之Flask實(shí)現(xiàn)簡(jiǎn)單登錄功能的示例代碼

    python之Flask實(shí)現(xiàn)簡(jiǎn)單登錄功能的示例代碼

    這篇文章主要介紹了python之Flask實(shí)現(xiàn)簡(jiǎn)單登錄功能的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12

最新評(píng)論

怀集县| 呼伦贝尔市| 奉节县| 九台市| 汝州市| 汪清县| 元氏县| 抚顺市| 双城市| 牡丹江市| 新龙县| 格尔木市| 黔西| 青龙| 商洛市| 清水县| 泰州市| 襄垣县| 吐鲁番市| 酒泉市| 新营市| 天峻县| 扎囊县| 衡山县| 鹤山市| 大丰市| 巩留县| 阳江市| 天峨县| 静宁县| 聊城市| 宝丰县| 南投县| 望城县| 涞水县| 和龙市| 镇宁| 新余市| 乌鲁木齐县| 玉龙| 信丰县|