我看到过类似的问题,但与我遇到的问题并不完全相同。我正在使用Python 3.7和Pandas 0.25.0。
很奇怪,如果我直接从this link下载此zip文件,则可以通过pd.read_csv
读取它,如下所示:
pd.read_csv('publicleaderboarddata.zip')
TeamId TeamName SubmissionDate Score
0 688191 Sergey Mushinskiy 2017-05-24 12:20:34 0.06630
1 688203 DeepVoltaire 2017-05-24 12:25:03 0.06630
2 688237 RakeshNikam 2017-05-24 13:02:31 0.06512
......
但是,如果我这样做:
this_leaderboard_df = pd.read_csv('https://www.kaggle.com/c/6649/publicleaderboarddata.zip,
compression='zip')
我将收到一个BadZipFile
错误,如下所示。为什么会这样?
-------------------------------------------------- ---------------------------- BadZipFile Traceback(最近的呼叫 最后) ----> 1个this_leaderboard_df = pd.read_csv(this_leaderboard_link,compression ='zip') 2 this_leaderboard_df.head(e)
〜/ .virtualenvs / py3 / lib / python3.7 / site-packages / pandas / io / parsers.py在 parser_f(filepath_or_buffer,sep,分隔符,标头,名称,index_col, usecols,squeeze,前缀,mangle_dupe_cols,dtype,引擎,转换器, true_values,false_values,skipinitialspace,skiprows,skipfooter, nrows,na_values,keep_default_na,na_filter,详细, skip_blank_lines,parse_dates,infer_datetime_format,keep_date_col, date_parser,dayfirst,cache_dates,迭代器,chunksize,压缩, 千位,十进制,换行符,quotechar,引号,双引号, 转义符,注释,编码,方言,error_bad_lines, warn_bad_lines,delim_whitespace,low_memory,memory_map, float_precision) 683) 684 -> 685 return _read(filepath_or_buffer,kwds) 686 687 parser_f。名称 =名称
〜/ .virtualenvs / py3 / lib / python3.7 / site-packages / pandas / io / parsers.py在 _read(filepath_or_buffer,kwds) 455 456#创建解析器。 -> 457解析器= TextFileReader(fp_or_buf,** kwds) 458 459,如果为chunksize或迭代器:
〜/ .virtualenvs / py3 / lib / python3.7 / site-packages / pandas / io / parsers.py在 init (自我,f,引擎,** kwds) 893 self.options [“ has_index_names”] = kwds [“ has_index_names”] 894 -> 895 self._make_engine(self.engine) 896 897 def close(self):
〜/ .virtualenvs / py3 / lib / python3.7 / site-packages / pandas / io / parsers.py在 _make_engine(self,engine)1133 def _make_engine(self,engine =“ c”):1134如果engine ==“ c”: -> 1135 self._engine = CParserWrapper(self.f,** self.options)1136否则:1137如果engine ==“ python”:
〜/ .virtualenvs / py3 / lib / python3.7 / site-packages / pandas / io / parsers.py在 init (自我,src,** kwds)1915 kwds [“ usecols”] = self.usecols 1916 -> 1917 self._reader =解析器.TextReader(src,** kwds)1918 self.unnamed_cols = self._reader.unnamed_cols 1919
pandas / _libs / parsers.pyx在 pandas._libs.parsers.TextReader。初始化()
pandas / _libs / parsers.pyx在 pandas._libs.parsers.TextReader._setup_parser_source()
/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/zipfile.py 在 init 中(自身,文件,模式,压缩,allowZip64,compresslevel) 1223试试:1224如果mode =='r': -> 1225 self._RealGetContents()1226在('w','x')中的elif模式:1227#设置修改后的 标记,以便写入中央目录
/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/zipfile.py 在_RealGetContents(self)1290中引发BadZipFile(“ File 不是zip文件”),如果不是endrec,则为1291: -> 1292如果self.debug> 1:1294 print(endrec),则引发BadZipFile(“文件不是zip文件”)1293
BadZipFile:文件不是zip文件
答案 0 :(得分:1)
要下载它,您必须登录到Kaggle。如果您从Kaggle注销并尝试直接从链接下载,则会看到登录表单。
pandas
无法登录到此页面,因此它将获得带有登录表单而不是zip文件的HTML。
您可以使用Selenium来控制Web浏览器,然后脚本可以使用浏览器登录Kaggle并下载文件。