Не удается прочитать файл из HTTP.get

#julia

#julia

Вопрос:

Мне нужно было получить несколько файлов xlsm с веб-страницы, на которой есть логин и пароль. Чтобы попасть туда, я нашел файл cookie аутентификации в своем веб-браузере и использовал HTTP.get функцию следующим образом:

 r = HTTP.get(url_file; cookies=Dict("FedAuth" => auth_cookie))
  

Как только я получил результат, я хотел бы его записать. Я пробовал использовать функцию записи и всевозможные форматы: .xlsx, xls, xlsm, csv, например:

 write("dados_bdo.xlsm",r.body)
  

Файл был записан, и я смог открыть его с помощью libreoffice, однако, когда я пытаюсь прочитать с помощью Julia, используя CSV.read , или XLSX.readxlsx я получаю ошибки.

 > XLSX.readxlsx("dados_bdo.xlsx") 
ERROR: AssertionError: isempty(XML_GLOBAL_ERROR_STACK)

> CSV.read("dados_bdo.csv") 
ERROR: ArgumentError: Symbol name may not contain 
  

Это typeof(r.body) Array{UInt8,1} .
Я действительно думаю, что проблема заключается в письменной части, но я не знаю, как поступить по-другому.

Ответ №1:

Вы записываете байты правильно.

Я думаю, что для отладки вам следует изучить свои данные.

Для файла CSV вы всегда можете выполнить String(r.body) и посмотреть, что находится внутри строки. Одной из возможных проблем может быть использование некоторой кодировки символов, в этом случае вам следует использовать StringEncodings.jl

Что касается xlsm — файл Excel на самом деле представляет собой zip-файл с большим количеством XML-файлов внутри. Zip-файлы содержат суммы CRC. Следовательно, чтобы проверить правильность загрузки, попробуйте разархивировать его. Если распаковка dados_bdo.xlsm» завершается успешно, файл загружен и записан правильно, и проблема где-то в другом месте. Вы также можете попробовать прочитать этот файл через PyCall, используя одну из библиотек Python, и посмотреть, сохраняется ли проблема.

Ответ №2:

Поиск в Google по запросу «ОШИБКА: ошибка аргумента: имя символа может не содержать 0» выявляет эту проблему на github, которая предполагает, что вы должны попытаться использовать следующую опцию при чтении CSV:

CSV.read(file; normalizenames=true)

Не зная URL-адреса (и содержимого), который вы извлекаете, это лучший совет, который я могу дать. Если вы укажете URL-адрес, я (или кто-то другой) могу попытаться воспроизвести ошибку и точно объяснить, почему вы получаете ошибку.

Ответ №3:

Я думаю, моя проблема действительно в данных. Есть несколько файлов xlsm, которые я могу открыть с помощью XLSX.readxlsx(«data.xlsx «), и другие, которые создают ту же ошибку (ОШИБКА: ошибка утверждения: isempty(XML_GLOBAL_ERROR_STACK)).

Кроме того, после того, как я воспроизвожу эту ошибку в одном файле, я не могу открыть какой-либо другой файл, даже те, которые не воспроизводили никакой ошибки.

Я опубликую здесь ссылку на два файла одного и того же источника, один из которых выдает мне ошибку, а другой — нет.Google Диск: файл с ошибкой