来自网址

时间:2019-12-03 05:01:59

标签: python python-3.x pandas csv zip

我看到过类似的问题,但与我遇到的问题并不完全相同。我正在使用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文件

1 个答案:

答案 0 :(得分:1)

要下载它,您必须登录到Kaggle。如果您从Kaggle注销并尝试直接从链接下载,则会看到登录表单。

pandas无法登录到此页面,因此它将获得带有登录表单而不是zip文件的HTML。

您可以使用Selenium来控制Web浏览器,然后脚本可以使用浏览器登录Kaggle并下载文件。