Я пытаюсь прочитать файл CSV и импортировать данные в CSV в DynamoDB. Во-первых, я собираюсь сохранить файл CSV в контейнерах s3. Затем я прочитал S3 в CSV и импортировал эти данные в DynamoDB, используя функцию AWS Lambda. Я использовал следующий скрипт Python в функции Lambda.
import boto3
import csv
def lambda_handler(event, context):
bucket_name = event['BUCKETNAME']
key_name = event['KEYNAME']
table_name = event['TABLENAME']
recList=[]
try:
s3=boto3.client('s3')
dyndb = boto3.client('dynamodb')
content= s3.get_object(Bucket=bucket_name, Key=key_name)
recList = content['Body'].read().split('\n')
firstrecord=True
csv_reader = csv.reader(recList, delimiter=',', quotechar='"')
for row in csv_reader:
if (firstrecord):
firstrecord=False
continue
emp_id = row[0]
emp_name = row[1].replace(',','').replace('$','') if row[1] else '-'
company = row[2].replace(',','').replace('$','') if row[2] else '_'
email = row[2].replace(',','').replace('$','') if row[2] else '_'
response = dyndb.put_item(
TableName=table_name,
Item={
'emp_id' : {'S':emp_id},
'emp_name': {'S':emp_name},
'company': {'S':company},
'email': {'S':email},
}
)
print('Put succeeded:')
except Exception as e:
print (str(e))
Но когда я вызываю лямбду, выполнение прошло успешно, но импорт не произошел, а следующая ошибка появляется в виде журнала функций.
Function Logs:
START RequestId: 5dcb3a35-d613-411e-be31-333a33c7ccd3 Version: $LATEST
a bytes-like object is required, not 'str'
END RequestId: 5dcb3a35-d613-411e-be31-333a33c7ccd3
REPORT RequestId: 5dcb3a35-d613-411e-be31-333a33c7ccd3 Duration: 1797.48 ms Billed Duration: 1800 ms Memory Size: 128 MB Max Memory Used: 77 MB Init Duration: 294.79 ms
В приведенном выше журнале
- В чем причина
a bytes-like object is required, not 'str'
? - И является ли это причиной того, что данные не импортируются в DynamoDB?
- Что я должен сделать, чтобы решить проблему и полностью заполнить мое требование?
Любая помощь будет принята с благодарностью! Заранее спасибо!