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

基于Python實現(xiàn)讀取嵌套壓縮包下文件的方法

 更新時間:2025年04月20日 13:37:36   作者:袁袁袁袁滿  
工作中遇到的問題,需要用Python實現(xiàn)嵌套壓縮包下文件讀取,本文給大家介紹了詳細的解決方法,并有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下

思路

  1. 打開外層zip壓縮包并遍歷文件
    • 使用with zipfile.ZipFile(outer_zip_path, 'r') as outer_zip語句以讀取模式'r'打開用戶輸入的外層zip壓縮包對應(yīng)的文件,這樣在代碼塊結(jié)束后會自動關(guān)閉該文件,避免資源泄露。
    • 通過outer_zip.namelist()獲取外層壓縮包內(nèi)所有文件和文件夾名稱的列表,并進行遍歷。針對每個文件名,使用if file_name.endswith('.zip')判斷是否為內(nèi)層壓縮包(即文件名以.zip結(jié)尾),如果是,則進入后續(xù)處理內(nèi)層壓縮包的相關(guān)流程。
  2. 處理內(nèi)層壓縮包相關(guān)信息
    • 首先,打印內(nèi)層壓縮包的名稱,方便用戶知曉當前正在處理的內(nèi)層壓縮包情況。
    • 接著,通過inner_zip_data = outer_zip.read(file_name)讀取該內(nèi)層壓縮包的二進制數(shù)據(jù),然后利用with zipfile.ZipFile(BytesIO(inner_zip_data), 'r') as inner_zip語句將讀取到的二進制數(shù)據(jù)借助BytesIO模擬成一個臨時的zip文件對象,再次以讀取模式打開,以便后續(xù)操作。
    • 之后,使用inner_zip.namelist()獲取內(nèi)層壓縮包中的所有文件名列表,再進行遍歷,逐個打印出這些文件名,展示內(nèi)層壓縮包包含的所有文件情況。
  3. 讀取內(nèi)層壓縮包中的文件內(nèi)容
    • 對于內(nèi)層壓縮包中的每個文件名,嘗試通過file_data = inner_zip.read(inner_file_name)讀取文件的二進制數(shù)據(jù)。
    • 接著,嘗試以utf-8編碼(假設(shè)文件內(nèi)容是UTF-8編碼,實際中可根據(jù)具體情況調(diào)整編碼方式)將讀取到的二進制數(shù)據(jù)解碼為文本并打印出來,通過print(file_data.decode('utf-8'))實現(xiàn),這樣能展示文件的內(nèi)容(如果是文本文件的話)。
    • 同時,使用try-except塊來捕獲可能出現(xiàn)的錯誤:
      • 如果出現(xiàn)UnicodeDecodeError,說明以utf-8編碼無法正確解碼文件內(nèi)容,很可能該文件不是文本文件,此時會打印相應(yīng)提示信息。
      • 如果出現(xiàn)其他異常(通過except Exception as e捕獲),則打印出具體的錯誤信息,告知用戶讀取文件時出現(xiàn)了其他問題。

完整代碼

以下是一個Python代碼示例,用于輸入一個外層zip壓縮包路徑,然后打印內(nèi)層壓縮包名、內(nèi)層壓縮包下的所有文件名,并讀取內(nèi)層壓縮包中的文件內(nèi)容(這里簡單以文本形式打印讀取到的內(nèi)容,你可以根據(jù)實際文件類型進一步做針對性處理,比如是圖片、文檔等不同處理方式)。代碼中使用了zipfile模塊來處理zip壓縮包:

import zipfile
from io import BytesIO


def process_nested_zips(outer_zip_path):
    with zipfile.ZipFile(outer_zip_path, 'r') as outer_zip:
        # 遍歷外層壓縮包中的所有文件
        for file_name in outer_zip.namelist():
            if file_name.endswith('.zip'):
                print(f"內(nèi)層壓縮包名: {file_name}")
                # 將內(nèi)層壓縮包提取到臨時目錄(這里使用內(nèi)存中的BytesIO模擬臨時目錄,僅用于獲取信息,也可提取到實際磁盤目錄)
                inner_zip_data = outer_zip.read(file_name)
                with zipfile.ZipFile(BytesIO(inner_zip_data), 'r') as inner_zip:
                    inner_file_names = inner_zip.namelist()
                    print(f"{file_name} 下面的所有文件名:")
                    for inner_file_name in inner_file_names:
                        print(inner_file_name)
                        # 讀取內(nèi)層壓縮包中的文件內(nèi)容
                        try:
                            file_data = inner_zip.read(inner_file_name)
                            print(f"文件 {inner_file_name} 的內(nèi)容如下(以文本形式展示,若為非文本文件可能顯示亂碼):")
                            print(file_data.decode('utf-8'))  # 假設(shè)文件內(nèi)容是UTF-8編碼,可根據(jù)實際調(diào)整
                        except UnicodeDecodeError:
                            print(f"文件 {inner_file_name} 無法以UTF-8編碼解碼,可能不是文本文件")
                        except Exception as e:
                            print(f"讀取文件 {inner_file_name} 時出現(xiàn)其他錯誤: {str(e)}")


outer_zip_path = input("請輸入外層zip壓縮包的路徑:")
process_nested_zips(outer_zip_path)

代碼優(yōu)化

如果考慮到壓縮包中文件名可能存在編碼不一致等情況,可以對代碼進行如下優(yōu)化,添加文件名編碼處理部分:

import zipfile
from io import BytesIO


def process_nested_zips(outer_zip_path):
    with zipfile.ZipFile(outer_zip_path, 'r', encoding='utf-8') as outer_zip:  # 設(shè)置外層壓縮包文件名編碼為utf-8,可根據(jù)實際調(diào)整
        # 遍歷外層壓縮包中的所有文件
        for file_name in outer_zip.namelist():
            if file_name.endswith('.zip'):
                print(f"內(nèi)層壓縮包名: {file_name}")
                # 將內(nèi)層壓縮包提取到臨時目錄(這里使用內(nèi)存中的BytesIO模擬臨時目錄,僅用于獲取信息,也可提取到實際磁盤目錄)
                inner_zip_data = outer_zip.read(file_name)
                with zipfile.ZipFile(BytesIO(inner_zip_data), 'r', encoding='utf-8') as inner_zip:  # 同樣設(shè)置內(nèi)層
                    inner_file_names = inner_zip.namelist()
                    print(f"{file_name} 下面的所有文件名:")
                    for inner_file_name in inner_file_names:
                        print(inner_file_name)
                        # 讀取內(nèi)層壓縮包中的文件內(nèi)容
                        try:
                            file_data = inner_zip.read(inner_file_name)
                            print(f"文件 {inner_file_name} 的內(nèi)容如下(以文本形式展示,若為非文本文件可能顯示亂碼):")
                            print(file_data.decode('utf-8'))  # 假設(shè)文件內(nèi)容是UTF-8編碼,可根據(jù)實際調(diào)整
                        except UnicodeDecodeError:
                            print(f"文件 {inner_file_name} 無法以UTF-8編碼解碼,可能不是文本文件")
                        except Exception as e:
                            print(f"讀取文件 {inner_file_name} 時出現(xiàn)其他錯誤: {str(e)}")


outer_zip_path = input("請輸入外層zip壓縮包的路徑:")
process_nested_zips(outer_zip_path)

在上述優(yōu)化后的代碼中,通過在打開zip文件對象時(外層和內(nèi)層的ZipFile構(gòu)造函數(shù)中)設(shè)置encoding屬性為utf-8(可根據(jù)實際情況確定正確的編碼方式,比如有些可能是GBK等),來盡量避免因文件名編碼問題導(dǎo)致的錯誤,使得程序在處理包含不同編碼文件名的壓縮包時更加健壯。不過準確判斷和設(shè)置正確的編碼可能需要額外的信息或者進一步的測試驗證等操作。

以上就是基于Python實現(xiàn)讀取嵌套壓縮包下文件的方法的詳細內(nèi)容,更多關(guān)于Python讀取嵌套壓縮包下文件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • django-rest-swagger的優(yōu)化使用方法

    django-rest-swagger的優(yōu)化使用方法

    今天小編就為大家分享一篇django-rest-swagger的優(yōu)化使用方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python繪制數(shù)碼晶體管日期

    Python繪制數(shù)碼晶體管日期

    這篇文章主要為大家詳細介紹了Python繪制數(shù)碼晶體管日期,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • Python3+Appium安裝使用教程

    Python3+Appium安裝使用教程

    這篇文章主要介紹了Python3+Appium安裝使用教程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • python提取excel一列或多列數(shù)據(jù)另存為新表代碼實例

    python提取excel一列或多列數(shù)據(jù)另存為新表代碼實例

    在日常的工作中,其實就是用鼠標進行數(shù)據(jù)篩選,然后選擇你想要這一行數(shù)據(jù)進行復(fù)制,下面這篇文章主要給大家介紹了關(guān)于python提取excel一列或多列數(shù)據(jù)另存為新表的相關(guān)資料,需要的朋友可以參考下
    2024-06-06
  • python golang中g(shù)rpc 使用示例代碼詳解

    python golang中g(shù)rpc 使用示例代碼詳解

    這篇文章主要介紹了python golang中g(shù)rpc 使用,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • 使用Python進行QQ批量登錄的實例代碼

    使用Python進行QQ批量登錄的實例代碼

    這篇文章主要介紹了使用Python進行QQ批量登錄的實例代碼,代碼簡單易懂非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • Keras—embedding嵌入層的用法詳解

    Keras—embedding嵌入層的用法詳解

    這篇文章主要介紹了Keras—embedding嵌入層的用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python神經(jīng)網(wǎng)絡(luò)Keras實現(xiàn)LSTM及其參數(shù)量詳解

    python神經(jīng)網(wǎng)絡(luò)Keras實現(xiàn)LSTM及其參數(shù)量詳解

    這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)Keras實現(xiàn)LSTM及其參數(shù)量詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Pandas數(shù)據(jù)類型之category的用法

    Pandas數(shù)據(jù)類型之category的用法

    Pandas中有一種特殊的數(shù)據(jù)類型叫做category.它表示的是一個類別,一般用在統(tǒng)計分類中,比如性別,血型,分類,級別等等.有點像java中的enum,今天給大家詳細講解一下category的用法,需要的朋友可以參考下
    2021-06-06
  • pycharm軟件實現(xiàn)設(shè)置自動保存操作

    pycharm軟件實現(xiàn)設(shè)置自動保存操作

    這篇文章主要介紹了pycharm軟件實現(xiàn)設(shè)置自動保存操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06

最新評論

西峡县| 乌鲁木齐县| 麻江县| 沅江市| 伽师县| 淮南市| 庆元县| 张北县| 龙州县| 南木林县| 平和县| 河曲县| 公主岭市| 台中县| 乌兰县| 灵寿县| 五指山市| 普定县| 寿宁县| 古交市| 涡阳县| 个旧市| 惠州市| 新绛县| 东至县| 红河县| 敖汉旗| 大安市| 镇安县| 乐亭县| 会理县| 郎溪县| 新乡市| 晋州市| 德格县| 靖边县| 楚雄市| 兴义市| 昔阳县| 姜堰市| 乌拉特后旗|