Пропустить первую строку - при чтении объекта с использованием API get_object - PullRequest
0 голосов
/ 11 октября 2018

Как пропустить первую строку - при чтении объекта с использованием API get_object

import os
import boto3
import json
import logging

def lambda_handler(event, context):

    # Fetch the bucket name and the file
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = event['Records'][0]['s3']['object']['key']


    # Generate record in DynamoDB
    try :
        # Declare S3 bucket and DynamoDB Boto3 Clients
        s3_client = boto3.client('s3')
        dynamodb = boto3.resource('dynamodb')

        # Read the Object using get_object API
        obj = s3_client.get_object(Bucket=bucket, Key=key)
        rows = obj['Body'].read().decode("utf-8").split('\n')

        tableName = os.environ['DB_TABLE_NAME']
        table = dynamodb.Table(tableName)

        log.info("TableName: " + tableName)

        # Need client just to access the Exception
        dynamodb_client = boto3.client('dynamodb')

        try :
            # Write the CSV file to the DynamoDB Table
            with table.batch_writer() as batch:
                for row in rows:       
                    batch.put_item(Item={
                        'x': row.split(',')[0],
                        'c': row.split(',')[1],
                        'w': row.split(',')[2],
                        'f': row.split(',')[3]
                        })


            print('Finished Inserting into TableName: ' + tableName)
        except dynamodb_client.exceptions.ResourceNotFoundException as tableNotFoundEx:
            return ('ERROR: Unable to locate DynamoDB table: ', tableName)


    except KeyError as dynamoDBKeyError:
        msg = 'ERROR: Need DynamoDB Environment Var: DB_TABLE_NAME'
        print(dynamoDBKeyError)
        return msg;

Выше код читает CSV и вставляет в динамо-базу данных.Проблема здесь - строка заголовка (столбец nmaes) также вставляется в таблицу.Как мне пропустить первый ряд и начать разбор со второго ряда?next у меня не работает

1 Ответ

0 голосов
/ 12 октября 2018

Возможно, не лучшее решение, но это должно сработать:

import os
import boto3
import json
import logging

def lambda_handler(event, context):

    # Fetch the bucket name and the file
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = event['Records'][0]['s3']['object']['key']


    # Generate record in DynamoDB
    try :
        # Declare S3 bucket and DynamoDB Boto3 Clients
        s3_client = boto3.client('s3')
        dynamodb = boto3.resource('dynamodb')

        # Read the Object using get_object API
        obj = s3_client.get_object(Bucket=bucket, Key=key)
        rows = obj['Body'].read().decode("utf-8").split('\n')

        tableName = os.environ['DB_TABLE_NAME']
        table = dynamodb.Table(tableName)

        log.info("TableName: " + tableName)

        # Need client just to access the Exception
        dynamodb_client = boto3.client('dynamodb')

        try :
            first = True
            # Write the CSV file to the DynamoDB Table
            with table.batch_writer() as batch:
                for row in rows:
                    if first:
                        first = False
                    else:       
                        batch.put_item(Item={
                            'x': row.split(',')[0],
                            'c': row.split(',')[1],
                            'w': row.split(',')[2],
                            'f': row.split(',')[3]
                            })


            print('Finished Inserting into TableName: ' + tableName)
        except dynamodb_client.exceptions.ResourceNotFoundException as tableNotFoundEx:
            return ('ERROR: Unable to locate DynamoDB table: ', tableName)


    except KeyError as dynamoDBKeyError:
        msg = 'ERROR: Need DynamoDB Environment Var: DB_TABLE_NAME'
        print(dynamoDBKeyError)
        return msg;

Возможно, было бы лучше использовать цикл for i in range(1, len(rows)), но приведенное выше требует меньше изменений в коде

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...