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

Python批量解壓文件中出現(xiàn)中文亂碼的原因及解決方法

 更新時(shí)間:2023年08月21日 09:58:45   作者:布拉德特皮  
這篇文章主要給大家記一次Python批量解壓文件遇中文亂碼及解決過程,文中有詳細(xì)的圖解及代碼示例,具有一定的參考價(jià)值,需要的朋友可以參考下

前言

因?yàn)楣ぷ髟颍咎岣吡藢?duì)項(xiàng)目的安全掃描水平,所以最近在學(xué)習(xí)Web逆向工程。

通過付費(fèi)渠道,拿到了關(guān)于 Python 爬蟲的相關(guān)教材,百度網(wǎng)盤下載后發(fā)現(xiàn)文件格式像套娃一樣(如下圖所示),如果30+個(gè)文件都挨個(gè)點(diǎn)進(jìn)去解壓,就顯得有點(diǎn)愚蠢,正好同時(shí)要學(xué) Python,于是拿來練手,寫一個(gè)批量解壓的腳本,由此引出了標(biāo)題。

image.png

省流

在調(diào)用 zipfile.ZipFile() 方法時(shí),需要多傳 metadata_encoding 參數(shù),即:

with zipfile.ZipFile(sub_zip_path, 'r', metadata_encoding='gbk') as item:

編寫腳本

這里直接貼源碼了,主要是遍歷文件,并使用 zipfile 庫(kù)解壓:

import os
import zipfile
import shutil
origin_file_path = r"G:\Nas\爬蟲第11期"
# 使用 os.listdir 獲取目錄下的所有文件列表
path_dir = os.listdir(origin_file_path)
for finder in path_dir:
    # 拼接路徑
    item_path = os.path.join(origin_file_path, finder)
    # 如果是文件夾
    if os.path.isdir(item_path):
        # 繼續(xù)獲取子目錄下的文件列表
        sub_file_dir = os.listdir(item_path)
        # 如果不是空文件夾
        if len(sub_file_dir): 
            # 正常應(yīng)該用正則判斷是不是zip文件
            # 因?yàn)槊總€(gè)文件夾只有一個(gè)zip壓縮包,固直接取sub_file_dir的下標(biāo)0
            sub_zip_path = os.path.join(item_path, sub_file_dir[0])
            # 將文件解壓到當(dāng)前目錄
            zip_to_path = os.path.join(sub_zip_path, finder)
            # 參數(shù) r 代表自動(dòng)轉(zhuǎn)義【盤符】
            with zipfile.ZipFile(sub_zip_path, 'r') as item:
                # 其實(shí)直接調(diào)用extractall方法可以實(shí)現(xiàn)全部解壓
                # item.extractall(item_path)
                # 遍歷壓縮文件,并解壓
                for name in item.namelist():
                    item.extract(name, item_path)
                    print(f'name: {name} | {sub_zip_path}')
                item.close()
            # 若對(duì)解壓結(jié)果不滿意,批量刪除
            # if os.path.isdir(sub_zip_path):
            #     shutil.rmtree(sub_zip_path)
            print(finder, item_path, sub_file_dir)
    else:
        print('isFile:', finder)

點(diǎn)擊運(yùn)行,然后……

image.png

完全的亂碼,根本沒法用。

批量刪除(可選)

此時(shí)可以把批量刪除的代碼注釋打開,清空亂碼文件,即:

            # 參數(shù) r 代表自動(dòng)轉(zhuǎn)義【盤符】
            # with zipfile.ZipFile(sub_zip_path, 'r') as item:
            #     # item.extractall(item_path)
            #     for name in item.namelist():
            #         item.extract(name, item_path)
            #         print(f'name: {name} | {sub_zip_path}')
            #     item.close()
            # 若對(duì)解壓結(jié)果不滿意,批量刪除
            if os.path.isdir(sub_zip_path):
                shutil.rmtree(sub_zip_path)

shutil.rmtree() 就是刪除整個(gè)文件夾(不會(huì)校驗(yàn)子目錄的狀態(tài))的意思

尋解過程

Google 后發(fā)現(xiàn)大多數(shù)都是幾年前的解法,而且涉及到修改庫(kù)文件源碼:

image.png

image.png

于是在查看源碼的過程中,發(fā)現(xiàn)其實(shí)3.11版本已經(jīng)支持了中文解碼,只需要傳入?yún)?shù)即可:

image.png

由上圖可知,若不傳入 metadata_encoding 就會(huì)默認(rèn)按 cp437 處理。

修改后,再次運(yùn)行腳本,發(fā)現(xiàn)打印和解壓目錄也正常了:

image.png

image.png

到此這篇關(guān)于Python批量解壓文件中出現(xiàn)中文亂碼的原因及解決方法的文章就介紹到這了,更多相關(guān)Python解壓文件中出現(xiàn)中文亂碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python使用時(shí)間間隔的操作及技巧分享

    python使用時(shí)間間隔的操作及技巧分享

    Python 中處理時(shí)間間隔和日期時(shí)間的操作通常涉及 datetime 模塊,它提供了豐富的功能來處理日期和時(shí)間,本文給大家介紹了一些關(guān)于時(shí)間間隔操作的技巧和示例,并通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • pytorch 實(shí)現(xiàn)模型不同層設(shè)置不同的學(xué)習(xí)率方式

    pytorch 實(shí)現(xiàn)模型不同層設(shè)置不同的學(xué)習(xí)率方式

    今天小編就為大家分享一篇pytorch 實(shí)現(xiàn)模型不同層設(shè)置不同的學(xué)習(xí)率方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 用Python字符畫出了一個(gè)谷愛凌

    用Python字符畫出了一個(gè)谷愛凌

    之前經(jīng)常在網(wǎng)上看到那種由一個(gè)個(gè)字符構(gòu)成的視頻,非常炫酷。本文也將利用Python字符畫一個(gè)最近的冬奧冠軍谷愛凌,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-02-02
  • Python遠(yuǎn)程開發(fā)環(huán)境部署與調(diào)試過程圖解

    Python遠(yuǎn)程開發(fā)環(huán)境部署與調(diào)試過程圖解

    這篇文章主要介紹了Python遠(yuǎn)程開發(fā)環(huán)境部署與調(diào)試過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • python爬蟲爬取某網(wǎng)站視頻的示例代碼

    python爬蟲爬取某網(wǎng)站視頻的示例代碼

    這篇文章主要介紹了python爬蟲爬取某網(wǎng)站視頻的示例代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • python 如何區(qū)分return和yield

    python 如何區(qū)分return和yield

    這篇文章主要介紹了python 如何區(qū)分return和yield,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • Python使用Pandas處理測(cè)試數(shù)據(jù)的方法

    Python使用Pandas處理測(cè)試數(shù)據(jù)的方法

    Pandas是一個(gè)功能極其強(qiáng)大的數(shù)據(jù)分析庫(kù),可以高效地操作各種數(shù)據(jù)集,這篇文章主要介紹了Python自動(dòng)化測(cè)試-使用Pandas來高效處理測(cè)試數(shù)據(jù),需要的朋友可以參考下
    2023-02-02
  • python處理按鈕消息的實(shí)例詳解

    python處理按鈕消息的實(shí)例詳解

    這篇文章主要介紹了python處理按鈕消息的實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 最新評(píng)論