Ошибка при чтении и сохранении файла Excel с использованием URL - PullRequest
0 голосов
/ 30 апреля 2020

Я зачищаю страницу со ссылками на файлы .xls. Есть две ссылки (почти идентичные), когда я применяю код к первой, но когда я применяю ко второй, я получаю ошибку.

Я уже получил ссылки (365, одна на каждый день года) и сохраните его в списке. Полный код сохраняет каждый файл / день в формате CSV. Идет нормально со дня 1 / января до 18 / января, но как только он попадает в день 19 / января, я получаю сообщение об ошибке.

Первый файл (работает нормально):

url_site = 'https://www.prefeitura.sp.gov.br/cidade/secretarias/upload/'
url_dia = '18012019_Dados para Transparência.xls'
url_dia = urllib.parse.quote(url_dia)

pd.read_excel(url_site + url_dia, skiprows=range(3), header=None).to_csv('18012019.csv', index=False, header=None)

Второй файл (ошибка):

url_site = 'https://www.prefeitura.sp.gov.br/cidade/secretarias/upload/'
url_dia = '19012019_Dados para Transparência.xls'
url_dia = urllib.parse.quote(url_dia)

pd.read_excel(url_site + url_dia, skiprows=range(3), header=None).to_csv('19012019.csv', index=False, header=None)

Сообщение об ошибке:

---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-8-4305762bd986> in <module>
      2 url_dia = urllib.parse.quote(url_dia)
      3 
----> 4 pd.read_excel(url_site + url_dia, skiprows=range(3), header=None).to_csv('19012019.csv', index=False, header=None)

~\anaconda3\lib\site-packages\pandas\util\_decorators.py in wrapper(*args, **kwargs)
    206                 else:
    207                     kwargs[new_arg_name] = new_arg_value
--> 208             return func(*args, **kwargs)
    209 
    210         return wrapper

~\anaconda3\lib\site-packages\pandas\io\excel\_base.py in read_excel(io, sheet_name, header, names, index_col, usecols, squeeze, dtype, engine, converters, true_values, false_values, skiprows, nrows, na_values, keep_default_na, verbose, parse_dates, date_parser, thousands, comment, skip_footer, skipfooter, convert_float, mangle_dupe_cols, **kwds)
    308 
    309     if not isinstance(io, ExcelFile):
--> 310         io = ExcelFile(io, engine=engine)
    311     elif engine and engine != io.engine:
    312         raise ValueError(

~\anaconda3\lib\site-packages\pandas\io\excel\_base.py in __init__(self, io, engine)
    817         self._io = _stringify_path(io)
    818 
--> 819         self._reader = self._engines[engine](self._io)
    820 
    821     def __fspath__(self):

~\anaconda3\lib\site-packages\pandas\io\excel\_xlrd.py in __init__(self, filepath_or_buffer)
     19         err_msg = "Install xlrd >= 1.0.0 for Excel support"
     20         import_optional_dependency("xlrd", extra=err_msg)
---> 21         super().__init__(filepath_or_buffer)
     22 
     23     @property

~\anaconda3\lib\site-packages\pandas\io\excel\_base.py in __init__(self, filepath_or_buffer)
    355             # N.B. xlrd.Book has a read attribute too
    356             filepath_or_buffer.seek(0)
--> 357             self.book = self.load_workbook(filepath_or_buffer)
    358         elif isinstance(filepath_or_buffer, str):
    359             self.book = self.load_workbook(filepath_or_buffer)

~\anaconda3\lib\site-packages\pandas\io\excel\_xlrd.py in load_workbook(self, filepath_or_buffer)
     32         if hasattr(filepath_or_buffer, "read"):
     33             data = filepath_or_buffer.read()
---> 34             return open_workbook(file_contents=data)
     35         else:
     36             return open_workbook(filepath_or_buffer)

~\anaconda3\lib\site-packages\xlrd\__init__.py in open_workbook(filename, logfile, verbosity, use_mmap, file_contents, encoding_override, formatting_info, on_demand, ragged_rows)
    155         formatting_info=formatting_info,
    156         on_demand=on_demand,
--> 157         ragged_rows=ragged_rows,
    158     )
    159     return bk

~\anaconda3\lib\site-packages\xlrd\book.py in open_workbook_xls(filename, logfile, verbosity, use_mmap, file_contents, encoding_override, formatting_info, on_demand, ragged_rows)
     86             formatting_info=formatting_info,
     87             on_demand=on_demand,
---> 88             ragged_rows=ragged_rows,
     89         )
     90         t1 = perf_counter()

~\anaconda3\lib\site-packages\xlrd\book.py in biff2_8_load(self, filename, file_contents, logfile, verbosity, use_mmap, encoding_override, formatting_info, on_demand, ragged_rows)
    634                 for qname in ['Workbook', 'Book']:
    635                     self.mem, self.base, self.stream_len = \
--> 636                                 cd.locate_named_stream(UNICODE_LITERAL(qname))
    637                     if self.mem: break
    638                 else:

~\anaconda3\lib\site-packages\xlrd\compdoc.py in locate_named_stream(self, qname)
    397             result = self._locate_stream(
    398                 self.mem, 512, self.SAT, self.sec_size, d.first_SID,
--> 399                 d.tot_size, qname, d.DID+6)
    400             if self.DEBUG:
    401                 print("\nseen", file=self.logfile)

~\anaconda3\lib\site-packages\xlrd\compdoc.py in _locate_stream(self, mem, base, sat, sec_size, start_sid, expected_stream_size, qname, seen_id)
    447             s = sat[s]
    448         assert s == EOCSID
--> 449         assert tot_found == found_limit
    450         # print >> self.logfile, "_locate_stream(%s): seen" % qname; dump_list(self.seen, 20, self.logfile)
    451         if not slices:

AssertionError: 

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...