Как читать большой файл.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. (Я не уверен, что такое *****. Загружаемый файл. Я предполагаю, что это какая-то кодировка 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.
Вопрос
Есть ли какие-либо средства кодирования и анализа этой строки байтов?
В идеале я хотел бы читать.xls построчно, не загружая весь файл в оперативную память сразу. Есть ли способы сделать это?