Не удалось получить CSV от S3 и конвертировать его с Python - PullRequest
0 голосов
/ 28 октября 2019

Мне нужно прочитать CSV-файл из корзины s3 и вставить каждую строку в DynamoDB

def load_users_dynamodb():

s3 = boto3.client('s3')
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table("test")

obj = s3.get_object(Bucket='test-app-config', Key='extract_Users.csv')
#return obj
data = obj['Body'].read().split('\n')

#return json.dumps(data)

with table.batch_writer() as batch:
    for row in data:
        batch.put_item(Item={
            'registration': row.split(',')[0],
            'name': row.split(',')[1],
            'role': row.split(',')[2],
            'company': row.split(',')[3],
            'hiredcompany': row.split(',')[4],
            'region': row.split(',')[5]
        })

return 'OK'

Я получаю исключение, и я не могу продолжить:

   Response:
{
  "errorMessage": "a bytes-like object is required, not 'str'",
  "errorType": "TypeError",
  "stackTrace": [
  "  File \"/var/task/lambda_function.py\", line 10, in          lambda_handler\n    'body': load_users_dynamodb()\n",
"  File \"/var/task/lambda_function.py\", line 21, in load_users_dynamodb\n    data = obj['Body'].read().split('\\n')\n"
]
}

Кто-то может мне помочьпожалуйста? о /

1 Ответ

1 голос
/ 28 октября 2019

Ваша проблема связана с декодированием возврата объекта из s3.Вы должны прочитать файл как csv.

Взгляните на следующий фрагмент кода:

import boto3
import csv

s3 = boto3.client('s3')

def lambda_handler(event, context):
    obj = s3.get_object(Bucket='Bucket_Name', Key='File_Name.csv')
    data = obj['Body'].read().decode('utf-8').splitlines()
    lines = csv.reader(data)
    headers = next(lines)
    print('headers: %s' %(headers))
    for line in lines:
        print(line)

Вывод:

enter image description here

Dummy csv .

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