2016-06-20 3 views
3

Я новичок в python, а также в библиотеке pandas в Python. Документация плохо описана, и они не объяснили это хорошо. Я хочу, чтобы сохранить dataframe как формат первенствовать и в памяти, и я нашел следующее объяснение: [Pandas excel to the memory]Pandas python, что такое тип кодировки книги?

Мне нужно объяснение о workbook. Значение этой переменной закодировано, как я могу увидеть реальное значение этой переменной? Как его декодировать? что должно быть для него возвратом?

Редакция:

Как передать его в содержание вложения в Mandrill апи. https://mandrillapp.com/api/docs/messages.python.html

Это моя привязанность часть для excel extension:

'attachments': [ 
      { 
       'content': content, 
       'name': 'fraud_report.xlsx', 
       'type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' 
      } 

Я не могу открыть файл первенствовать и все время i'am getteing ошибку из Microsoft Excel, в котором говорилось the file format is not valid!... Любая помощь может быть полезным. Спасибо

ответ

2

Для объяснения я вставить пример из вашей ссылки здесь:

# Safe import for either Python 2.x or 3.x 
try: 
    from io import BytesIO 
except ImportError: 
    from cStringIO import StringIO as BytesIO 

bio = BytesIO() 

# By setting the 'engine' in the ExcelWriter constructor. 
writer = ExcelWriter(bio, engine='xlsxwriter') 
df.to_excel(writer, sheet_name='Sheet1') 

# Save the workbook 
writer.save() 

# Seek to the beginning and read to copy the workbook to a variable in memory 
bio.seek(0) 
workbook = bio.read() 

Метод writer.save() сохраняет данные в BytesIO (bio) вместо файла Excel. Это означает, что переменная bio хранит коды байтов файла excel.

Метод bio.seek(0) устанавливает текущую позицию (для чтения, письма, ...) из bio в . Чтобы вы могли прочитать данные bio, начиная с следующего метода bio.read().

Переменная workbook хранит строку байтов файла excel (или excel workbook). Если вы читаете файл excel в байтовом режиме, вы получите те же данные.Или вы можете записать его в файл Excel:

with open("my_excel_file.xlsx", "wb") as f: 
    f.write(workbook) 

Для чтения данных из bio и хранить в DataFrame вам не нужны bio.read():

bio.seek(0) 
df = pd.read_excel(bio, "Sheet1", engine="xlrd") 

Для вашего вопроса об использовании mandrill:

В примере Mandrill вы видите:

{'attachments': [{'content': 'ZXhhbXBsZSBmaWxl', 
         'name': 'myfile.txt', 
         'type': 'text/plain'}],... 

Документация пишет об этом тоже:

содержание: содержание вложения в кодировке Base64 строки

Вы должны кодировать workbook в base64 и использовать его для отправки

import base64 
content = base64.b64encode(workbook) 

P/S: workbook и content имеют тип bytes. Может быть, вам нужно будет преобразовать content в str перед отправкой.

{'attachments': [{'content': content.decode('utf-8'), 
          'name': 'myfile.xlsx', 
          'type': 'text/plain'}],... 

Добавить: если файл Excel, то вы должны изменить type к application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

+0

Я хотел бы добавить, я использую '' mandrillapp' в https://mandrillapp.com/api/docs/messages.python.html', чтобы отправить сообщение, поэтому я не хочу использовать метод write. Я хотел бы сохранить только переменную, а затем отправить ее в «содержимое» вложения. у тебя есть другое предложение для меня? –

+0

Я не знаю о 'mandrillapp'. Но вы хотите отправить содержимое «DataFrame» или «Excel File»? – qvpham

+0

Mandrill принимает только переменную, а затем создает файл самостоятельно. Это приложение не читает файл. поэтому я не могу передать ему файл. –

Смежные вопросы