我正在使用此方法提取此zipfile。
r = requests.get(url)
z = zipfile.ZipFile(io.BytesIO(r.content))
z.extractall("Documents_zip") #This is where the error occurs
我从Python收到此错误:
BadZipFile: File name in directory '2017-08-29_Cerfa_CpC_Ombi+¿res_Lac_Th+⌐sauque.pdf' and header b'2017-08-29_Cerfa_CpC_Ombi\xc3\xa8res_Lac_Th\xc3\xa9sauque.pdf' differ.
我对zipfile模块不太了解,但是我发现它太严格了,不需要检查文件名和标头。
如何提取而不引起错误?
编辑1:
我创建此函数是为了避免出现错误。它只是返回一个布尔值以指示是否运行了zip提取。
def download_zip(z, path):
if not(z.testzip()):
z.extractall(path)
return True
else:
return False
答案 0 :(得分:0)
我完成了上一个功能。
它将zip文件解压缩到namde path
文件夹中。如果出现问题,则更改当前目录的名称,并指出损坏的文件数。
该函数还会返回该数字。
import os
import zipfile
def download_zip(z, path):
names_files = z.namelist()
count = 0
for my_file in names_files:
if my_file:
if z.testzip():
if not(my_file in z.testzip()):
try:
z.extract(my_file, path=path)
except zipfile.BadZipfile:
count = count +1
else:
z.extract(my_file, path=path)
else:
count = count + 1
if count != 0:
my_path = os.getcwd()
parent = os.path.dirname(my_path)
os.chdir(parent)
os.rename(my_path, my_path + ' - ' + str(count) + ' doc du zip non extrait')
os.chdir(my_path + ' - ' + str(count) + ' doc du zip non extrait')
return count