解决load()文件报错zipfile.BadZipFile: File is not a zip file
报错如下图:
有可能是资源没有关闭造成了错误,这个网上已经有很多解决方案了,大家可自行查阅。
如果你在别的地方都没有找到解决问题,那么可能是以下这种情况。
1、描述
我在服务器上的代码load()加载文件时,出现了报错。我替换了各种文件都不行,排除了是文件本身的问题,随后我又看到网上大家说的可能是资源没有正常关闭,也与我的情况不符。
2、问题定位
在我被折磨一整天后,无意间看到了github的一篇帖子,应该是一个即将毕业的大学生在做毕业设计时遇到了这个问题,就是这个报错File is not a zip file。Copilot给他的回答是缺失一个依赖包,nltk_data这个包。这里放一下那个地址:英语基础还行的同学可以去看一眼,不看也没事。
https://github.com/langchain-ai/langchain/discussions/18261
Copilot answer:
Based on the error message you provided, it seems that the issue is related to the NLTK library when it tries to find a package and fails to open it as a zip file. This could be due to a corrupted NLTK data package.
To address this issue, I suggest manually downloading the NLTK packages
3、原因猜测
代码在我本地是能正常跑的,我弄到公司服务器上后,这行就出了问题。看了上面的帖子,原因就是缺失这个包,我猜可能是我服务器在安装环境时,由于不能开科学上网安装依赖包很慢,所以我就用了阿里云的镜像安装,导致这个包没有下载下来,我去找deepseek问了nltk镜像地址,点进去发现没有哈哈哈哈。而且清华镜像也是没有找到这个。
4、解决方案
4.1、Copilot 给出的解决方案:
import nltk
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')
就是用python代码去下载这个包。
4.2、我的建议
其实我要是能用python代码下载下来,那我装环境的时候就下载下来了,就是因为下载不了才用的镜像源。
所以上面的这串代码我直接卡住了,后来我又去他的官网看了一下,又不知道用哪个版本。
因此我最后直接把我电脑上的nltk_data文件夹复制到服务器了,能用。哈哈哈。
它会在如下几个地方搜索这个文件夹,你只需要保证这几个地方任意一个位置有文件就行。
Searched in:
- '/home/xxxx/nltk_data'
- '/home/xxxx/anaconda3/envs/rag/nltk_data'
- '/home/xxxx/anaconda3/envs/rag/share/nltk_data'
- '/home/xxxx/anaconda3/envs/rag/lib/nltk_data'
- '/usr/share/nltk_data'
- '/usr/local/share/nltk_data'
- '/usr/lib/nltk_data'
- '/usr/local/lib/nltk_data'
我建议放在conda的python环境里面
我这里上传了我的版本,不知道你能不能下载,应该在页面的最上面。