最近在B站上看李沐大神的动手学习深度学习V2,在跑他的源码natural-language-inference-and-dataset时,第一个块就出现了如下的报错信息:
OSError Traceback (most recent call last)
<ipython-input-1-2b8316634310> in <module>
10 '9fcde07509c7e87ec61c640c1b2753d9041758e4')
11
---> 12 data_dir = d2l.download_extract('SNLI')
13 # data_dir = "..\data\snli_1.0"
D:\ProgramData\Anaconda3\envs\pytorch\lib\site-packages\d2l\torch.py in download_extract(name, folder)
405 else:
406 assert False, 'Only zip/tar files can be extracted.'
--> 407 fp.extractall(base_dir)
408 return os.path.join(base_dir, folder) if folder else data_dir
409
D:\ProgramData\Anaconda3\envs\pytorch\lib\zipfile.py in extractall(self, path, members, pwd)
1645
1646 for zipinfo in members:
-> 1647 self._extract_member(zipinfo, path, pwd)
1648
1649 @classmethod
D:\ProgramData\Anaconda3\envs\pytorch\lib\zipfile.py in _extract_member(self, member, targetpath, pwd)
1699
1700 with self.open(member, pwd=pwd) as source, \
-> 1701 open(targetpath, "wb") as target:
1702 shutil.copyfileobj(source, target)
1703
OSError: [Errno 22] Invalid argument: '..\\data\\snli_1.0\\Icon\r'
在网上并没有找到比较好的解决方法,研究了一下午,终于解决了。
报错的原因是SNLI数据集的压缩文件"snli_1.0.zip"里面有两个路径为“snli_1.0\Icon\r”和“’__MACOSX/snli_1.0/._Icon\r’”的文件,导致无法解析此路径进而导致整个文件无法解压。
解决方法有两个:
方法一(有点麻烦):把"snli_1.0.zip"里的两个Icon文件删除
删除这两个文件后,“snli_1.0.zip"就能顺利解压,问题就解决了。但是要重写函数download_extract(具体方法是在download和extract之间把两个Icon删除了)或者写脚本删除两个Icon文件。
方法二:手动解压数据集"snli_1.0.zip”
找到data文件夹,手动把数据集"snli_1.0.zip"解压了(选解压到当前文件夹),然后把data_dir赋值为数据集解压后的路径(就是把data_dir = d2l.download_extract('SNLI')
改为data_dir = " ..\data\snli_1.0"
,其它用到了的方法也要记得改)就可以运行啦。