python zipfile extract 解壓 中文檔名
正常使用:
解壓縮: ZipFile.extract(member,path = None,pwd = None )
引數 | 解釋 |
---|---|
members | zipfile 物件中某個檔名 |
path | 解壓到的目的路徑,預設是壓縮包所在路徑 |
pwd | 壓縮包密碼, 預設無密碼 |
例子
import zipfile
...
zip_file = zipfile.ZipFile(file_name, 'r')
try:
for names in zip_file.namelist():
zip_file.extract(names, path=mypath)
except Exception as e:
raise
壓縮: 利用 write 方法, ZipFile.write(filename, arcname=None, compress_type=None)
引數 | 解釋 |
---|---|
filename | 檔名 |
arcname | 壓縮檔名 |
compress_type | If given, compress_type overrides the value given for the compression parameter to the constructor for the new entry. 如果給定,compress_type將為新條目覆蓋為壓縮引數給建構函式指定的值。沒用過不知道啥用。 |
- 注意: ZIP檔案沒有官方檔名編碼。如果你有unicode檔名,你必須在將它們傳遞給你所需的編碼之前將它們轉換為位元組串write()。WinZip將所有檔名解釋為在CP437中編碼,也稱為DOS Latin。
- 注意: 檔案名稱應該與檔案根目錄相關,也就是說,它們不應該以路徑分隔符開頭。
- 注意: 如果arcname(或者filename如果arcname未給出)包含空位元組,則歸檔檔案的名稱將在空位元組處截斷。
例子
def get_zip(filename, target_list, to_path=current_dir):
"""
zip file
:param filename: 壓縮包命名
:param target_list: [(帶壓縮檔案絕對路徑,壓縮後文件起名(相對路徑)),....] 列表
:param to_path: 壓縮包儲存路徑
:return: get_zip('SDA-ST-2000',
[[('/Users/sunping/avlsdk3/0ecccee29a1a47afbb09cba842f79ca2','License.alf'),
('/Users/sunping/avlsdk3/b92272762514429392a6d2fe8cd696f4','.DS_Store'),
('/Users/sunping/avlsdk3/9acd9ead7b4b4ebdb0b59288d9d08368','AVLSDK.so'),
('/Users/sunping/avlsdk3/38c4785d6fac4988bb256bc8b29e23d3','AVLScanner.exe'),
('/Users/sunping/avlsdk3/eff46ac936374111b9224e81c1a39bef','aid2name.so')], '/Users/sunping/antiy/client')
"""
z = zipfile.ZipFile(path_join(to_path, filename+'.zip'), 'w')
for t, s in target_list:
z.write(t, s)
z.close()
解決解壓中文檔名報錯
丟擲異常: Illegal byte sequence, ‘ascii’ codec can’t decode byte … in position ……. 等等 諸如此類的錯誤,其實都是編碼問題!!!
思路1: 直接讀取/開啟壓縮包內檔案, 利用 open 寫入指定檔案
注意: 這裡不能使用 zipfile 物件的 namelist() 方法, 採用遍歷 zipfile 物件的 infolist() 方法
程式碼舉例
import sys
import shutil
import zipfile
...
zip_file = zipfile.ZipFile(file_name, 'r')
try:
for file_info in zip_file.infolist():
filename = unicode(file_info.filename, 'gb2312').encode("utf8") # 採用什麼編碼就用什麼解碼,再用 utf8 編碼
# filename = file_info.encode('gb2312').decode('utf-8') # 也可以寫成這樣
print 'filename is ', filename
output_filename = os.path.join(name, filename)
output_file_dir = os.path.dirname(output_filename)
if not os.path.exists(output_file_dir):
os.makedirs(output_file_dir)
with open(output_filename, 'wb') as f:
shutil.copyfileobj(zip_file.open(file_info.filename), f)
except Exception as e:
Logger(sys.exc_info()[2]).error(e)
思路2 採用 extractall 方法
可以省略指定解壓檔案物件
import zipfile
...
zip_file = zipfile.ZipFile(file_name, 'r')
global zip_file
yourpath = '/xxx/xxxx/xxxx...'
try:
zip_file.extractall(path=yourpath)
except Exception as e:
Logger(sys.exc_info()[2]).error(e)
finally:
zip_file.close
補充
python2.7. zipfile 中 處理檔名 :
def _encodeFilenameFlags(self):
if isinstance(self.filename, unicode):
try:
return self.filename.encode('ascii'), self.flag_bits
except UnicodeEncodeError:
return self.filename.encode('utf-8'), self.flag_bits | 0x800
else:
return self.filename, self.flag_bits
def _decodeFilename(self):
if self.flag_bits & 0x800:
return self.filename.decode('utf-8')
else:
return self.filename
python 3.6 zipfile 中 處理檔名:
# 編碼
if flags & 0x800:
# UTF-8 file names extension
filename = filename.decode('utf-8')
else:
# Historical ZIP filename encoding
filename = filename.decode('cp437')
# 解碼
if zinfo.flag_bits & 0x800:
# UTF-8 filename
fname_str = fname.decode("utf-8")
else:
fname_str = fname.decode("cp437")
相關推薦
python zipfile extract 解壓 中文檔名
正常使用: 解壓縮: ZipFile.extract(member,path = None,pwd = None ) 引數 解釋 members zipfile 物件中某個檔名 path 解壓到的目的路徑,預設
如何在Linux下解壓中文檔名的壓縮包
最近我的一個同事傳給我一個很大的音樂壓縮檔案。其中的很多的資料夾和中文歌曲在Ubuntu下顯示如下: 當我通過解壓的方式把檔案解壓到我的Ubuntu桌面後,顯示的是很多的亂碼。我們該如何解決這個問題呢? 具體的解決辦法如下: 1)通過如下的命令,解壓我們的.zip
python zip 檔案解壓中文亂碼問題解決
今天突然碰到zip檔案解壓後中文亂碼問題。百度了下覺得這篇文章不錯。儲存儲存。 來源:http://blog.sina.com.cn/s/blog_5805e98101012uzv.html 萬惡的編碼!!!!!!!!!! 學習 python 2.x 時就被時不時出現
Python: zipfile壓縮解壓檔案
判斷是否是ZIP檔案 用zipfile.is_zipfile判斷。 import zipfile print(zipfile.is_zipfile('samples/archive.zip
python使用zipfile解壓中文亂碼問題
在zipfile.ZipFile中獲得的filename有中日文則很大可能是亂碼,這是因為 在zip標準中,對檔名的 encoding 用的不是 unicode,而可能是各種軟體根據系統的預設字符
Python-zipfile解壓中文問題
本文例項講述了Python遍歷zip檔案輸出名稱時出現亂碼問題的解決方法。分享給大家供大家參考。具體如下: windows中使用python2.7遍歷zip檔案之後輸出檔名等資訊,console列印的中文及一些標點出現亂碼。查了一下網上說的windows的編碼
python3 解決zip解壓中文亂碼問題,親測可用, ZipFile
""" Read and write ZIP files. XXX references to utf-8 need further investigation. """ import io import os import re import importlib.util impor
python遞迴解壓資料夾中所有壓縮包
1. 簡述 遞迴解壓資料夾中的所有壓縮包到指定資料夾 2. 環境配置 python解壓rar檔案需要安裝依賴庫 (python-unrar) Windows: 在 RARLab 官
Python打包與解壓zip
打包 shutil模組 shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]]) 引數說明:
unzip命令解壓中文亂碼
原來在windows上的zip檔案, 在CentOS上使用unzip直接解壓會顯示亂碼, 因為windows簡體中文版的作業系統一般上用的是GBK編碼, 所以會導致這個問題, 可以使用-O引數來解決
Python基礎(解壓序列)
解壓序列: 1 a,b=(1,2) 2 # a,b=[1,2] 3 print(a,b) 4 #輸出結果:1 2 5 6 #獲取第一個值和最後一個值 7 a,*_,c=(1,2,3,4,5,6,7,8,9) 8 print(a) 9 print(c) 10 # 輸出結果
python tar 壓縮解壓
壓縮: 1. import tarfile import os def tar(fname): t = tarfile.open(fname + ".tar.gz", "w:gz") for root, dir, files in os.walk(fname):
關於Linux下解壓檔案檔名亂碼問題
#!/usr/bin/env python # -*- coding: utf-8 -*- # uzip.py import os import sys import zipfile print "Processing File " + sys.argv[1] file=zipfile.ZipFi
DoNetZip解壓縮中文檔名亂碼的解決方案
今天踩進了這個坑裡,寫一下省的後面的人掉坑 using (ZipFile zip = new ZipFile(zip_file, Encoding.UTF8)) { zip.Extract
【Python】使用 zipfile 解壓含有中文檔名的 zip 檔案
問題 在使用 Python 內建標準庫 zipfile 解壓檔案時,如果壓縮檔案中有的檔案含有中文,那麼解壓後就會發現檔名中的中文部分是亂碼。例如我分別新建三個 txt 檔案:檔案1.txt,檔案2.txt 和 檔案3.txt,然後將這三個檔案壓縮到一個名為
解決python中用zipfile解壓縮檔案時中文檔名亂碼的問題
來源:http://blog.sina.com.cn/s/blog_5805e98101012uzv.html 萬惡的編碼!!!!!!!!!! 學習 python 2.x 時就被時不時出現的中文亂碼問題搞得頭大,無奈用起來資料挺少、支援不多的 python 3.x,沒
python用zipfile模塊打包文件或是目錄、解壓zip文件實例
pre art directory zipfile dir col file r+ ted #!/usr/bin/env python # -*- coding: utf-8 -*- from zipfile import * import zipfile
Python使用urllib下載檔案以及使用zipfile解壓檔案
首先定義檔案下載路徑,檔名 import os from six.moves import urllib import zipfile DATA_URL = 'https://archive.ics.uci.edu/ml/machine-learning-databases/00240/UCI%
nodejs adm-zip 解壓檔案 中文檔名亂碼
最近的一個專案需要上傳zip檔案到伺服器,然後解壓到當前目錄,最初選用unzip包進行解壓,開始使用的時候不知道這個包有監聽函式,認為完全是同步的。實際是有完成解壓監聽函式的。使用adm-zip的時候是同步的,滿足需要,但是如果資料夾種有中文檔名的時候在windows下壓縮
linux下下載的zip檔案解壓之後中文檔名亂碼
我在下載一些檔案的時候,我的ubunt 14.04預設按照zip檔案給我打包下載的,但是下載下來之後,發現解壓之後我的中文檔名先試試的都為亂碼,後來看了其他部落格博主的一些解決方法,發現這麼一個好的方法,親試OK的。 第一步 首先安裝7zip和convmv(如