使用zipFile读取文件时遇到的问题及解决(KeyError: "There is no item named 'xxx' in the archive")
问题描述
在Windows上跑一段代码时,遇到如下问题:
KeyError: "There is no item named 'CDR_Data\\\\CDR.Corpus.v010516\\\\CDR_DevelopmentSet.PubTator.txt' in the archive"
原因分析
这是一段Python代码,代码中使用到了zipfile库,它首先创建了一个ZipFile对象,然后在调用read()函数时弹出了错误。
相关语句如下:
def download_zip(url: str) -> ZipFile: r = requests.get(url) z = ZipFile(io.BytesIO(r.content)) return z
def _download_corpus() -> Tuple[str, str, str]: z = util.download_zip(CDR_URL) train = z.read(str(Path(PARENT_DIR) / TRAIN_FILENAME)).decode() valid = z.read(str(Path(PARENT_DIR) / VALID_FILENAME)).decode() test = z.read(str(Path(PARENT_DIR) / TEST_FILENAME)).decode() return train, valid, test
上述代码中,文件路径是通过Path()函数进行拼接,所生成的路径是由“\”分隔的,比如:
CDR_Data\CDR.Corpus.v010516\CDR_TrainingSet.PubTator.txt
可能是由于在不同平台上的编码格式有差异导致这在Windows上识别出错。
解决方法
弃用原有的路径拼接函数Path(),路径直接改成‘/’拼接,比如:
def _download_corpus() -> Tuple[str, str, str]: z = util.download_zip(CDR_URL) train = z.read('CDR_Data/CDR.Corpus.v010516/CDR_TrainingSet.PubTator.txt').decode() valid = z.read('CDR_Data/CDR.Corpus.v010516/CDR_DevelopmentSet.PubTator.txt').decode() test = z.read('CDR_Data/CDR.Corpus.v010516/CDR_TestSet.PubTator.txt').decode() return train, valid, test
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战