打开zip文件时出现问题

时间:2019-05-22 06:35:05

标签: python python-3.x

在python中读取zip文件时出错

我有一个问题,我必须阅读zip文件夹并读取其中的zip文件。

从压缩文件夹中读取一个文本文件时出现错误。

enter image description here

with zipfile.ZipFile(file_name) as zipped:
        for filenames in zipped.namelist():
            if not os.path.isdir(filenames):
                print(filenames)
                with open(filenames,"r",encoding="utf8") as file1:
                    print(file1)

当我尝试运行此代码时,我得到一个未找到xxxx-005.txt文件的错误

我的zip文件与代码位于同一文件夹中。

我也尝试了以下方法

import zipfile 
import os 
def read_file(file_name): 
    docs1 = [] 
    doc = [] 
    with zipfile.ZipFile(file_name) as zipped:    
    for filenames in zipped.namelist(): 
        if not os.path.isdir(filenames): # print(filenames) with 
           zipped.open(filenames) as file1: print(file1) read_file('xxxx.zip') 

**It printed the below error ----NotImplementedError: compression type 9 (deflate64)---- –**

3 个答案:

答案 0 :(得分:1)

该问题可能是由于zip存档中的目录所致。这些目录在这里引起误报:

if not os.path.isdir(filenames):

请检查文件名中的最后一个字符是否为/

import zipfile, os
with zipfile.ZipFile(file_name) as zipped:
    for filenames in zipped.namelist():
        if filenames[-1] != '/':
            print(filenames)

(感觉很难看。也许其他人知道更好的方法?)

答案 1 :(得分:1)

Python 提供的 zipfile 包不支持 Deflate64 压缩。您的错误消息清楚地说明了这一点,并且由于版权问题,故意不支持压缩消息。

一个较旧的问题得到了同样令人失望的解决方案。

Extracting large files with zipfile

pypi 上显然有一个monkeypatched 包可以提供此功能,但我还没有尝试过。 (https://pypi.org/project/zipfile-deflate64/)

顺便说一下,通过使用 infolist() 方法迭代 ZipInfo 对象,您可以检查每个 ZipInfo 实例以确定该条目是否是具有 is_dir() 方法的目录。 (os.path.isdir 仅与本地文件相关,与包含在 Zip 存档中的文件无关)。

答案 2 :(得分:0)

使用ZipFile.open方法而不是默认的open方法。但这不能让您指定编码,而且我不确定这对您是否重要。

with zipfile.ZipFile(file_name) as zipped:
        for filenames in zipped.namelist():
            if not os.path.isdir(filenames):
                print(filenames)
                with zipped.open(filenames,"r") as file1:
                    print(file1)

此外,我注意到namelist也包含zip_file/作为名称之一,并且它也为os.path.isdir提供了False值。因此,您可能需要专门处理这种情况。