在python中解析POST的Excel文件

时间:2019-03-10 06:09:08

标签: python excel post aws-lambda aws-api-gateway

对不起,我是网络菜鸟。我正在尝试使用API​​网关发送excel文件,并使用python中的lambda处理它以写入S3。我将文件发送为“ application / octet-stream”,并在获得事件对象后进行解析,如下所示:

import io
import cgi
import pandas as pd
import xlrd

def read_file(event):
    c_type, c_data = parse_header(event['headers']['Content-Type'])
    encoded_file = event['body'].encode('utf-8')
    c_data['boundary'] = bytes(c_data['boundary'], "utf-8")
    parsed_body = cgi.parse_multipart(io.BytesIO(encoded_file), c_data)
    return(parsed_body)

这从本质上应该给了我一个io.BytesIO流,我应该能够将其读取为

df = pd.ExcelFile(list(parsed_body.values())[0][0], engine = 'xlrd')

read_file()将函数lambda_handler调用为

def lambda_handler(event, context):
    p_body = read_file(event)
    df = pd.ExcelFile(list(parsed_body.values())[0][0], engine = 'xlrd')
    # Some post processing to the df

我在熊猫无法阅读此parsed_body的时候失败了。我也尝试过multipart库,但也没有给我结果。

如果有人可以告诉我一种解析事件正文并给我结果的方法,我将不胜感激。

我得到的错误是

File "<ipython-input-264-dfd56a631cc4>", line 1, in <module>
cgi.parse_multipart(event_bytes, c_data)

File    

"/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/cgi.py",line 261, in parse_multipart
    line = fp.readline()

AttributeError: 'bytes' object has no attribute 'readline'

0 个答案:

没有答案