Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python:BadZipFile:目录和头中的文件名不同_Python 3.x_Zipfile - Fatal编程技术网

Python 3.x Python:BadZipFile:目录和头中的文件名不同

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

我用这个方法来提取这个

我从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 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