Чтение файла .xlsx из строки байтов - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь прочитать прикрепленный файл .xlsx по электронной почте.

Мне удалось получить тип email.message.Message, который имеет часть типа application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.Я должен быть в состоянии прочитать его, используя

file = part.get_payload(decode=True)

, который дает мне объект байтов, начинающийся с

b'PK\x03\x04\x14\x00\x06\x00\x08\x00\x00\x00!\x00\x93\xe11\xb6\x93\x01\x00\x003\x07\x00\x00\x13\x00\

Я хотел бы проанализировать это в словарь, используя

io.BytesIO(gzip.decompress(file))

Для некоторых электронных писем с заархивированным файлом .csv это работает, но файлы .xlsx не могут открываться при таком подходе.Я посмотрел онлайн, но я не смог найти никакого решения.Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Файлы Excel поставляются в сжатом виде и автоматически распаковываются при загрузке в сам Excel.

Библиотека openpyxl может напрямую загружать эти файлы Excel, например:

import openpyxl
import io

xlsx = io.BytesIO(part.get_payload(decode=True))
wb = openpyxl.load_workbook(xlsx)
ws = wb['Sheet1']

for cells in ws.iter_rows():    
    print([cell.value for cell in cells])
0 голосов
/ 26 сентября 2018

.xlsx - это ZIP, а не GZip архив.Это два совершенно разных формата.

Хотя вы можете использовать модуль zipfile для получения его содержимого, вам все равно понадобится специальный пакет для файлов Excel, чтобы разобраться в них.

...