如何在AWS lamdba python函数中读取并验证s3中上载的csv中的标头

时间:2019-03-30 15:12:13

标签: python-2.7 amazon-web-services csv aws-lambda

我需要将CSV数据上传到MySQL。为此,我利用了AWS Lambda服务。我正在Lambda函数(使用Python2.7)中从S3存储桶读取CSV文件。我想使用我在Lambda控制台的环境变量中插入的值来验证CSV的标头。但是,在打印数据时,我在每行最后一列的值的末尾得到“ \ r”。

我能够从CSV读取数据,并且这些值也被插入到MySQL DB中。

def validateCSV(event,context):
    EXPECTED_HEADERS=os.environ['RM_EXPECTED_HEADERS']
    s3 = boto3.client("s3")
    file_obj = event["Records"][0]
    bucketname = str(file_obj['s3']['bucket']['name'])
    filename = str(file_obj['s3']['object']['key'])
    fileObj = s3.get_object(Bucket=bucketname, Key=filename)
    rows = fileObj["Body"].read().split('\n')
    print(rows)//(['Name,Age,PinCode\r', 'Apple,15,411001\r',''])
    fList=[]
    for line in rows:
       fList.append(line.split(','))
    print("fList Headers matched: ",fList[0]==EXPECTED_HEADERS)//this is giving me FALSE

我在环境变量--key = RM_EXPECTED_HEADERS中添加了值,并将其值添加为['Name','Age','PinCode']。但是当我打印fList [0]时,我得到了[['Name','Age','PinCode \ r'])。

如何从fList [0]中删除“ / r”?

1 个答案:

答案 0 :(得分:0)

您可以从行中手动删除\r

  rows = [x.strip() for x in fileObj["Body"].read().split('\n'))

或者将它们包含在您的split(...)中:

  rows = [x.strip() for x in fileObj["Body"].read().split('\r\n'))

我对剩余的\r从未遇到过任何问题-python通常会处理\n(Linux)或\r\n(Windows)-如果使用Windows创建文本文件并拆分,则可能会出现问题他们在Unix下-不确定。