我在Python中使用rarfile和unrar来提取rar档案中的一些中文字符命名文件。 当我使用rarobj.extractall(TargetDir)函数时,它的工作原理。 但是当我使用
时#encoding:utf-8
...
for fl in rarobj.namelist():
rarobj.extract(fl,TargetDir)
有一个错误:
rarfile.RarNoFilesError: No files that match pattern were found [10]
并在以下内容中进行了更改:
#encoding:gbk
...
for fl in rarobj.namelist():
rarobj.extract(fl,TargetDir)
还有另一个错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)
并使用
for fl in rarobj.namelist():
rarobj.extract(fl.encode('gbk'),TargetDir)
可以消除此错误,但是它无法提取fl文件,因为文件名不在rar存档中。
我如何处理这个问题?
rarobj.namelist()是
[u'E:\\2y.pptx', u'E:\\\u6211\u662fabc.pptx', 'E:\\3b.docx', u'E:\\2x.docx', 'E:\\1a.pptx', 'E:\\1b.docx']
答案 0 :(得分:0)
使用open
代替extract
file_like_object = rarobj.open(fl)
data = file_like_object.read()