Как прочитать большой файл .XLS по частям, не загружая его сразу в оперативную память

Я пытаюсь анализировать различные типы очень больших файлов Excel (.csv, .xlsx, .xls)

Рабочие (.csv/.xlsx) потоки

.csv можно разбить на фрагменты с помощью pandas.read_csv(file, chunksize=chunksize)

.xlsx можно разбить на фрагменты, разархивировав его и проанализировав внутренние файлы .xml с помощью lxml.etree.iterparse(zip_file.open('xl/worksheets/sheet1.xml')) и lxml.etree.iterparse(zip_file.open('xl/sharedStrings.xml')), после чего выполняя дополнительные операции.

Не работает (.xls) поток

.xls Я не могу найти информацию о том, как разделить этот файл на части!

Подробности: мой файл имеет тип Django TemporaryUploadedFile. Я получаю его от request.data['file'] по запросу PUT.

Я получаю путь к файлу, например request.data['file'].temporary_file_path(). Это «/tmp/tmpu73gux4m.upload». (Я не уверен, что такое файл *****.upload. Я думаю, это какая-то кодировка файла HTTP)

Когда я пытаюсь прочитать это:

file.open()
content = file.read()

content выглядит как строка байтов b'\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1\x00\x00\x00\x00\x00\x00\x00\x00...etc.

Вопрос

  1. Существуют ли какие-либо средства кодирования и анализа этой строки байтов?

  2. В идеале я хотел бы читать .xls построчно, не загружая сразу весь файл в ОЗУ. Есть ли какие-нибудь средства сделать это?


person Eugene Kovalev    schedule 11.04.2018    source источник
comment
вы не можете преобразовать файл в csv, а затем использовать pandas.   -  person Piyush S. Wanare    schedule 11.04.2018
comment
обратитесь к этому stackoverflow.com/questions/47455562/.   -  person Piyush S. Wanare    schedule 11.04.2018
comment
@ Пиюш С. Ванаре нет, я не могу это преобразовать. Тысячи клиентов присылают мне .xls файлов. Нет возможности сообщить им о преобразовании их файлов в .csv. Конечно, это был бы лучший вариант для меня, но это невозможно.   -  person Eugene Kovalev    schedule 11.04.2018
comment
@Piyush S. Ware ссылка, которую вы применили, содержит информацию только о .xlsx. Мне нужна информация о .xls   -  person Eugene Kovalev    schedule 11.04.2018