Python解決Zipfile文件解壓中文亂碼
背景
在上一篇文章我們學習了如何在瀏覽器中下載文件:Selenium修改默認下載文件路徑,最后下載的文件是壓縮包的形式,我們想要分析數(shù)據(jù)就需要涉及到解壓文件,在這里我們使用Zipfile
包來實現(xiàn)壓縮文件的解壓操作。這個過程中遇到一個比較麻煩的問題就是解壓的文件名包括中文,所以導(dǎo)致發(fā)生亂碼現(xiàn)象,于是這里分享一下怎么去處理亂碼問題。
中文亂碼問題
異常解壓
原目錄下文件為:20230118110026_645.zip
執(zhí)行代碼-解壓文件:
import zipfile
def main():
file_zip = zipfile.ZipFile('D:/CSDN/DataDownload/20230118110026_645.zip')
# namelist()列表形式顯示壓縮文件”20230118110026_645.zip“中的所有文件名
# for語句遍歷文件名
for file in file_zip.namelist():
# 解壓文件到指定路徑下“D:\CSDN\DataDownload”
file_zip.extract(file, r'D:\CSDN\DataDownload')
print('解壓完成')
main()
此時目錄下顯示內(nèi)容為文件名亂碼:
問題分析以及解決方案
問題分析
zip標準中,對文件名的encoding用的不是unicode,而是系統(tǒng)的默認字符集;中文windows采用的GBK編碼,因此不是這種編碼方式則會出現(xiàn)中文亂碼的形式,在這里我們將源文件zipfile.py
(這里我的路徑是在D:\Python\Python311\Lib
目錄下)找到下面這兩個地方并且進行修改:
問題解決
filename = filename.encode("cp437").decode('gbk')
fname_str = fname_str.encode("cp437").decode('gbk') # ---0211修改
保存后,切換到程序頁面,再次執(zhí)行,此時文件名正常顯示,包括下級目錄皆正常:
知識拓展
解壓完成后刪除原zip文件,節(jié)省內(nèi)存:文章來源:http://www.zghlxwxcb.cn/news/detail-431353.html
import os
import zipfile
def main():
file_zip = zipfile.ZipFile('D:/CSDN/DataDownload/20230118110026_645.zip')
# namelist()列表形式顯示壓縮文件”20230118110026_645.zip“中的所有文件名
# for語句遍歷文件名
for file in file_zip.namelist():
# 解壓文件到指定路徑下“D:\CSDN\DataDownload”
file_zip.extract(file, r'D:\CSDN\DataDownload')
file_zip.close()
# 刪除zip文件
os.remove('D:/CSDN/DataDownload/20230118110026_645.zip')
print('解壓完成')
main()
總結(jié)
有的時候出現(xiàn)問題后,往往是我們把問題想的太復(fù)雜,甚至想通過自己寫方法去轉(zhuǎn)譯,當然如果能寫出來最好,但對于初學者,能簡單快速的解決問題不僅能給我們自信,還可以幫助我們積累解決問題的經(jīng)驗。文章來源地址http://www.zghlxwxcb.cn/news/detail-431353.html
到了這里,關(guān)于Python解決Zipfile文件解壓中文亂碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!