Python 3.x Python:BadZipFile:目录和头中的文件名不同
我用这个方法来提取这个 我从Python中得到这个错误:Python 3.x Python:BadZipFile:目录和头中的文件名不同,python-3.x,zipfile,Python 3.x,Zipfile,我用这个方法来提取这个 我从Python中得到这个错误: BadZipFile:目录“2017-08-29”中的文件名+⌐sauque.pdf'和标题b'2017-08-29_Cerfa\u CpC\u Ombi\xc3\xa8res\u Lac\u Th\xc3\xa9sauque.pdf'不同。 我对zipfile模块了解不多,但我发现它太严格了,没有必要检查文件名和头 如何提取而不引起错误? 编辑1: 我创建此函数是为了避免引发错误。它只返回一个布尔值,指示是否运行了zip提取 def d
BadZipFile:目录“2017-08-29”中的文件名+⌐sauque.pdf'和标题b'2017-08-29_Cerfa\u CpC\u Ombi\xc3\xa8res\u Lac\u Th\xc3\xa9sauque.pdf'不同。
我对zipfile模块了解不多,但我发现它太严格了,没有必要检查文件名和头
如何提取而不引起错误?
编辑1:
我创建此函数是为了避免引发错误。它只返回一个布尔值,指示是否运行了zip提取
def download_zip(z, path):
if not(z.testzip()):
z.extractall(path)
return True
else:
return False
我完成了上一个功能。 它将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
看起来可能是文件名和头对外来字符编码的方式有问题——它所使用的路径是什么?您正在使用的zip文件可能没有正确标记其字符编码。此zip文件看起来已损坏。尝试在命令行上,在Python之外解压它。@user727089您应该尝试使用,因为并非所有实用程序都会以相同的方式反映有效性。很好的建议,@AriCooper Davis!我学到了一些新东西:)@AriCooper-Davis在这种情况下,路径并不重要,如果我不指定它,它会引发同样的错误
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