Python批量解壓文件中出現(xiàn)中文亂碼的原因及解決方法
前言
因為工作原因,公司提高了對項目的安全掃描水平,所以最近在學習Web逆向工程。
通過付費渠道,拿到了關于 Python 爬蟲的相關教材,百度網盤下載后發(fā)現(xiàn)文件格式像套娃一樣(如下圖所示),如果30+個文件都挨個點進去解壓,就顯得有點愚蠢,正好同時要學 Python,于是拿來練手,寫一個批量解壓的腳本,由此引出了標題。
省流
在調用 zipfile.ZipFile()
方法時,需要多傳 metadata_encoding
參數,即:
with zipfile.ZipFile(sub_zip_path, 'r', metadata_encoding='gbk') as item:
編寫腳本
這里直接貼源碼了,主要是遍歷文件,并使用 zipfile
庫解壓:
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): # 正常應該用正則判斷是不是zip文件 # 因為每個文件夾只有一個zip壓縮包,固直接取sub_file_dir的下標0 sub_zip_path = os.path.join(item_path, sub_file_dir[0]) # 將文件解壓到當前目錄 zip_to_path = os.path.join(sub_zip_path, finder) # 參數 r 代表自動轉義【盤符】 with zipfile.ZipFile(sub_zip_path, 'r') as item: # 其實直接調用extractall方法可以實現(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() # 若對解壓結果不滿意,批量刪除 # if os.path.isdir(sub_zip_path): # shutil.rmtree(sub_zip_path) print(finder, item_path, sub_file_dir) else: print('isFile:', finder)
點擊運行,然后……
完全的亂碼,根本沒法用。
批量刪除(可選)
此時可以把批量刪除的代碼注釋打開,清空亂碼文件,即:
# 參數 r 代表自動轉義【盤符】 # 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() # 若對解壓結果不滿意,批量刪除 if os.path.isdir(sub_zip_path): shutil.rmtree(sub_zip_path)
shutil.rmtree()
就是刪除整個文件夾(不會校驗子目錄的狀態(tài))的意思
尋解過程
Google 后發(fā)現(xiàn)大多數都是幾年前的解法,而且涉及到修改庫文件源碼:
于是在查看源碼的過程中,發(fā)現(xiàn)其實3.11版本已經支持了中文解碼,只需要傳入參數即可:
由上圖可知,若不傳入 metadata_encoding
就會默認按 cp437
處理。
修改后,再次運行腳本,發(fā)現(xiàn)打印和解壓目錄也正常了:
到此這篇關于Python批量解壓文件中出現(xiàn)中文亂碼的原因及解決方法的文章就介紹到這了,更多相關Python解壓文件中出現(xiàn)中文亂碼內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
pytorch 實現(xiàn)模型不同層設置不同的學習率方式
今天小編就為大家分享一篇pytorch 實現(xiàn)模型不同層設置不同的學習率方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01Python遠程開發(fā)環(huán)境部署與調試過程圖解
這篇文章主要介紹了Python遠程開發(fā)環(huán)境部署與調試過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-12-12