在python中读取zip文件时出错
我有一个问题,我必须阅读zip文件夹并读取其中的zip文件。
从压缩文件夹中读取一个文本文件时出现错误。
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)---- –**
答案 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值。因此,您可能需要专门处理这种情况。