Python-zipfile解壓中文問題
阿新 • • 發佈:2019-01-06
本文例項講述了Python遍歷zip檔案輸出名稱時出現亂碼問題的解決方法。分享給大家供大家參考。具體如下:
windows中使用python2.7遍歷zip檔案之後輸出檔名等資訊,console列印的中文及一些標點出現亂碼。查了一下網上說的windows的編碼為cp936,print()函式交給系統處理列印,所以要提前編碼成windows能夠識別的編碼。
這種print的亂碼也會出現在形如print(mylist)中(mylist是python的list型別變數,print(mylist[2])則不會亂碼,奇怪)
程式碼如下:(.py檔案中在檔案頭先加 # -- coding: UTF-8 –
import zipfile
def listzipfilesinfo(path):
z=zipfile.ZipFile(path,'r')
try:
for filename in z.namelist():
bytes=z.read(filename)
print('File:%s Size:%s'%(unicode(filename, 'cp936').decode('utf-8'),len(bytes)))
finally:
z.close()
注:decode可以去掉
對於中文問題,如果上面的程式碼還不足以解決你的問題,我們還可以嘗試使用如下方法來進行解決:
import zipfile
def listzipfilesinfo(path,toPath):
"""
解壓
:param path:zip檔案路徑
:param toPath:解壓至的資料夾路徑
"""
with zipfile.ZipFile(path) as zipTools:
name_list = [unicode(item, 'cp936').decode('utf-8') for item in zipTools.name_list()]
for index,value in enumerate(zipTools.namelist()):
path = os.path.join(toPath, os.path.basename(name_list[index]))
data = zipTools.read(value)
with open(path, "w") as f:
f.write(data)
希望本文所述對大家的Python程式設計有所幫助。