import zipfileexamplezip = zipfile.zipfile('c:\\users\\del\\desktop\\新建資料夾 (2)\\新建資料夾 (2).zip')
for zip_file in examplezip.namelist():
try:
zip_file = zip_file.encode('cp437').decode('gbk')
except:
zip_file = zip_file.encode('utf-8').decode('utf-8')
print(zip_file)
examplezip.close();
python3中zipfile模組檔名亂碼問題inux下zip檔案亂碼已經是乙個常見問題了,再加上python想不遇到亂碼問題都難。
在zipfile.zipfile中獲得的filename有中日文則很大可能是亂碼,這是因為
在zip標準中,對檔名的 encoding 用的不是 unicode,而可能是各種軟體根據系統的預設字符集來採用(此為猜測),而zipfile中根據檔案 flag 檢測的時候,只支援 cp437 和 utf-8。
具體zipfile模組中的源**如下
if flags & 0x800:
#utf-8 file names extension
filename = filename.decode('
utf-8')
else
:
#historical zip filename encoding
filename = filename.decode('
cp437')
可見編碼被正確識別為utf8時的情況外,都會被識別並decode為cp437編碼,但如果實際是gbk等其他編碼時就變為亂碼了。所以解決的方法在於被decode為cp437後重新再手動轉為正確的編碼。具體**如下:
#這裡是在zipfile.infolist()方法獲得的info中取得filename
name =info.filename
try:
#使用cp437對檔名進行解碼還原
name = name.encode('
cp437')
#win下一般使用的是gbk編碼
name = name.decode("
gbk"
)except
:
#如果已被正確識別為utf8編碼時則不需再編碼
pass
執行結果:
新建資料夾1/
新建資料夾1/新建資料夾/
新建資料夾1/新建文字文件 (2).txt
新建資料夾1/新建文字文件.txt
新建文字文件1.txt
importzipfile
examplezip = zipfile.zipfile('
c:\\users\\del\\desktop\\新建資料夾 (2)\\新建資料夾 (2).zip')
(examplezip.namelist())
for zip_file in
examplezip.namelist():
try:
zip_file = zip_file.encode('
cp437
').decode('
gbk'
)
except
: zip_file = zip_file.encode('
utf-8
').decode('
utf-8')
(zip_file)
print(examplezip.getinfo('
11.txt
')) #
獲取某個檔案的詳細資訊的方法
xx = examplezip.getinfo('
11.txt')
print(xx.filename) #
代表檔案名字
print(xx.file_size) #
代表原檔案的大小
print(xx.compress_size) #
代表壓縮後檔案的大小
examplezip.close()
執行結果:
['11/', '11/2/', '11/22.txt', '11/222.txt', '11.txt']
11/11/2/
11/22.txt
11/222.txt
11.txt
11.txt
0
Python基礎 ZipFile模組
zipfile和zipinfo,在絕大多數的情況下,我們只需要使用這兩個class就可以了。zipfile是主要的類,用來建立和讀取zip檔案。而zipinfo是儲存的zip檔案的每個檔案的資訊的。import zipfile z zipfile.zipfile filename,r for i i...
python模組 zipfile檔案壓縮
zipfile模組是python中乙個處理壓縮檔案的模組,解決了不少我們平常需要處理壓縮檔案的需求 本文主要談談zipfile幾個常用的用法。首先我在windows作業系統中建立如下的檔案目錄 一 讀取壓縮檔案 import zipfile import os 壓縮檔案路徑 zip file pat...
Python模組zipfile原理及使用方法詳解
zipfile是python裡用來做zip格式編碼的壓縮和解壓縮的,由於是很常見的zip格式,所以這個模組使用頻率也是比較高的 zipfile裡有兩個非常重要的class,分別是zipfile和zipinfo,在絕大多數的情況下,我們只需要使用這兩個class就可以了。zipfile是主要的類,用來...