Как читать большой файл.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.

Вопрос

  1. Есть ли какие-либо средства кодирования и анализа этой строки байтов?

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

0 ответов

Другие вопросы по тегам