1. 程式人生 > >Python-zipfile解壓中文問題

Python-zipfile解壓中文問題

本文例項講述了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程式設計有所幫助。