python zipfile extract 解压 中文文件名[图]

08-01栏目:技术

TAG:extractall

extractall

Python zipfile模块官网 copyright www.jhua.org

正常使用:

解压缩: ZipFile.extract(member,path = None,pwd = None ) jhua.org

参数

解释

members

zipfile 对象中某个文件名

path

解压到的目的路径,默认是压缩包所在路径

pwd

压缩包密码, 默认无密码

例子

copyright www.jhua.org

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

https://www.jhua.org

压缩: 利用 write 方法, ZipFile.write(filename, arcname=None, compress_type=None)

copyright jhua.org

参数

解释

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未给出)包含空字节,则归档文件的名称将在空字节处截断。

例子 www.jhua.org

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()

copyright www.jhua.org

解决解压中文文件名报错

抛出异常: Illegal byte sequence, ‘ascii’ codec can’t decode byte … in position ……. 等等 诸如此类的错误,其实都是编码问题!!! https://www.jhua.org

思路1: 直接读取/打开压缩包内文件, 利用 open 写入指定文件

注意: 这里不能使用 zipfile 对象的 namelist() 方法, 采用遍历 zipfile 对象的 infolist() 方法

https://www.jhua.org

代码举例 copyright jhua.org

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)

www.jhua.org

思路2 采用 extractall 方法

可以省略指定解压文件对象 www.jhua.org

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 jhua.org

补充

python2.7. zipfile 中 处理文件名 : www.jhua.org

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 copyright jhua.org

python 3.6 zipfile 中 处理文件名: jhua.org

# 编码

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")

jhua.org

由此看来, 上面这种解决办法只是另辟蹊径, 等待 python 官方修改这个 bug 吧

https://www.jhua.org

欢迎入群(^__^) :556993881 就差你啦啦啦啦

https://www.jhua.org

参考: jhua.org

Stack Overflow python zipfile 无效文件名

https://www.jhua.org

Python标准库 » 13.数据压缩和存档 zipfile jhua.org

copyright jhua.org

www.jhua.org

www.jhua.org

相关阅读

ExtractFileDir 与 ExtractFilePath 的区别

https://www.jhua.org

ExtractFileDir 与 ExtractFilePath 的区别ExtractFileDir 从文件名中获取目录名(文件不在根目录下时取得的值后没有“/”,在根目 copyright www.jhua.org

xpath的extract()方法 jhua.org

extract()经常使用来切片(脱壳)从一个对象中得到list下面是scrapy的官方文档,里面有选择器(selector)的一些介绍http://scrapy-chs.rea

https://www.jhua.org

Pandas 文本数据方法 extract( ) extractall( ) www.jhua.org

Series.str.extract(pat, flags=0, expand=None)

参数: pat : 字符串或正则表达式 flags : 整型, expand : 布尔型,是否返回数据

www.jhua.org

DNF Extractor修改DNF背景图片与时装

https://www.jhua.org

dnf Extractor下完后直接安装就行,在这个界面有4个东西,修改DNF只需要安装DNF Extractor就足够了,其他3个是其他游戏的修改软件,装不 copyright www.jhua.org

推荐量:6074

下一篇:小白配置使用fre

python extractall函数_python zipfile extract 解压 中文文件名[图]相关推荐

  1. python zipfile extract 解压 中文文件名

    python zipfile模块官网 正常使用: 解压缩: ZipFile.extract(member,path = None,pwd = None ) 参数 解释 members zipfile ...

  2. c# ZipFile.Extract解压后,文件名中文乱码

    c#中使用ZipFile.Extract解压压缩包的时候,会出现中文文件名乱码的情况,原因是zipfile 会将所有文件名用 CP437 来编码,这就导致了中文乱码 using (var zip = ...

  3. python压缩文件_Python压缩及解压文件

    Zip压缩 #-*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" import zipfile #加载模块 # 压缩 z = zipf ...

  4. python extractall函数_python中的Extractall

    我试图用密码从zip文件中提取文件这是我的代码def extractFile(zfile,password): """ tries to open a file prin ...

  5. python extractall函数_Python的内置函数(七)、all()

    描述 all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False. 元素除了是 0.空.None.False 外都算 Tru ...

  6. python extractall函数_python - Pandas从str.extractall('#')给出错误 - 堆栈内存溢出

    我试图从推文文本中过滤掉所有#关键字. 我使用str.extractall()来提取#关键字的所有关键字. 这是我第一次使用pandas从tweetText过滤关键字. 输入,代码,预期输出和错误如下 ...

  7. python基础教程zip密码_python基础教程Python实现加密的RAR文件解压的方法(密码已知)...

    博主之前在网上找了很多资料,发现rarfile库不能直接调用,需要安装unrar模块,下面将详细介绍整个实现流程. 第一步:安装unrar模块,直接pip install unrar可能会找不到库,需 ...

  8. Python实战-暴力破解zip文件解压密码

    简介 使用的核心模块是python标准库中的zipfile模块.这个模块可以实现zip文件的各种功能,具体可以查看官方参考文档.这里的暴力破解的意思是对密码可能序列中的值一个一个进行密码尝试,这对人来 ...

  9. 手把手教你使用Python解决简单的zip文件解压密码

    简介 使用的核心模块是python标准库中的zipfile模块.这个模块可以实现zip文件的各种功能,具体可以查看官方参考文档.这里的暴力破解的意思是对密码可能序列中的值一个一个进行密码尝试,这对人来 ...

最新文章

  1. 智源神经元识别挑战赛发布:收获不只是10万元奖金
  2. Shell替换:Shell变量替换,命令替换,转义字符
  3. 【Java】随机发牌程序
  4. 都快2022年了GraphQL还值得学吗?
  5. Unity3d中BlinnPhong光照模型注解
  6. 孟菲斯风格海报设计素材,艺术一点点
  7. UTF-8字符集成为Java 18默认字符集?发布周期将至,Java 18现身
  8. 糟糕!原来你的电脑就是这样被木马远控了
  9. PHP compact函数
  10. 编程漫谈及计算机硬件简介
  11. 嵌入式ARM(Allwinner H3)下使用rtl8188eus无线网卡
  12. 超市便利店批发行业企业仓库,使用盘点机PDA扫描商品条码高效盘点,库存管不准怎么办
  13. 阿里云CentOS 6.8 + WordPress + 芒果云KODExplorer
  14. 验后方差估计python,python的哪个统计模块支持事后检验(Tukey,Scheffe或其他)的一种方差分析?...
  15. Ubuntu 18.04 无法上网
  16. DNK编程 JNI 之 javah
  17. 设置个性桌面计算机教案,第十三课《个性化的桌面设置》教学设计
  18. linux内核纳秒精度时间,Linux时钟精度:毫秒?微妙?纳秒?
  19. java小程序-画一幅海底世界的图
  20. symfony框架Twig模板语言的使用

热门文章

  1. 不断进场的各大巨头,不断发布的云游戏产品(10.28记录)
  2. idea 的tomcat项目查看tomcat日志
  3. 【BZOJ3609】 【Heoi2014】人人尽说江南好【贪心】
  4. w ndows10如何取消开机自动修复,Win10系统启动时如何跳过自动修复?
  5. 多旋翼飞行器技术_YY硕
  6. 常用的C盘手动清理方法(小白教程)
  7. Python pip配置国内源
  8. 大专学计算机好还是学电商好,现在大专读什么专业好 哪些专业前景好
  9. 大学化学专业和计算机哪个难,2021大学什么专业比较难学
  10. 华工 计算机应用 作业,华工 计算机应用基础2014作业