Python 3.x 如何使用python和boto3将xlsx导入dynamodb

Python 3.x 如何使用python和boto3将xlsx导入dynamodb,python-3.x,Python 3.x,尝试使用LinuxAcademy发布如何将Excel数据导入DynamoDB,但代码发布已经两年了,无法工作。任何提示或建议都会非常有用 对不起,我是新来的 我试着将excel电子表格转换成json,然后像LinuxAcademy上的帖子一样上传到DynamoDB。这些指令很旧,它们使用三个脚本上载一个文件。以下是我用来创建lambda AWS python函数的代码 唯一的问题是,它读取excel文件并将其转换为json,并且该文件太大,无法在5分钟超时之前将其接收到DynamoDB中。我可能

尝试使用LinuxAcademy发布如何将Excel数据导入DynamoDB,但代码发布已经两年了,无法工作。任何提示或建议都会非常有用

对不起,我是新来的


我试着将excel电子表格转换成json,然后像LinuxAcademy上的帖子一样上传到DynamoDB。这些指令很旧,它们使用三个脚本上载一个文件。

以下是我用来创建lambda AWS python函数的代码

唯一的问题是,它读取excel文件并将其转换为json,并且该文件太大,无法在5分钟超时之前将其接收到DynamoDB中。我可能会将其转换为阶跃函数,但这对我来说很有效

import boto3
import os
import sys
import uuid
import pandas as pd

s3_client = boto3.client('s3')
bucket = "serverless-record-storage-lambda"


def upload_to_dynamodb(report):
    df=pd.read_excel(report)
    df.columns=["APPLICATION", "FORM_NUMBER", "FILE_DATE", "STATUS_DATE", "STATUS", "STATUS_CODE", "EXPIRATION_DATE", "ESTIMATED COST", "REVISED_COST", "EXISTING_USE", "EXISTING_UNITS", "PROPOSED_USE","PROPOSED_UNITS","PLANSETS", "15_DAY_HOLD?" ,  "EXISTING_STORIES", "PROPOSED_STORIES", "ASSESSOR_STORIES", "VOLUNTARY", "PAGES", "BLOCK", "LOT", "STREET_NUMBER", "STREET_NUMBER_SFX", "AVS_STREET_NAME", "AVS_STREET_SFX", "UNIT", "UNIT_SFX", "FIRST_NAME", "LAST_NAME", "CONTRACTORPHONE",
        "COMPANY_NAME", "STREET_NUMBER", "STREET", "STREET_SUFFIX", "CITY", "STATE", "ZIP_CODE", "CONTACT_NAME", "CONTACT_PHONE", "DESCRIPTION" ]
    # Clean-up the data, change column types to strings to be on safer side :)
    df=df.replace({'-': '0'}, regex=True)
    df=df.fillna(0)
    for i in df.columns:
        df[i] = df[i].astype(str)
    # Convert dataframe to list of dictionaries (JSON) that can be consumed by any no-sql database
    myl=df.T.to_dict().values()
    # Connect to DynamoDB using boto
    resource = boto3.resource('dynamodb', region_name='us-west-2')
    # Connect to the DynamoDB table
    table = resource.Table('permitdata')
    # Load the JSON object created in the step 3 using put_item method
    for permit in myl:
        table.put_item(Item=permit)

def handler(event, context):
    for record in event['Records']:
        print(record)
        bucket = record['s3']['bucket']['name']
        print(bucket)
        key = record['s3']['object']['key']
        print(key)
        download_path = '/tmp/{}{}'.format(uuid.uuid4(), key)
        upload_path = '/tmp/resized-{}'.format(key)

        s3_client.download_file(bucket, key, download_path)
        upload_to_dynamodb(download_path)



def main():
    handler(event, None)

if __name__ == "__main__":
    main()

欢迎来到SO。请更加明确,分享您尝试过的代码和您遇到的具体错误,请参阅