Как прочитать и проверить заголовок в CSV, загруженном в S3 в функцию Python AWS Lamdba - PullRequest
0 голосов
/ 30 марта 2019

Мне нужно загрузить данные CSV в MySQL. Для этого я использовал сервис AWS Lambda. Я читаю файл CSV из корзины S3 в функции Lambda, которая использует Python2.7. Я хочу проверить заголовок CSV со значениями, которые я вставил в переменные среды в консоли Lambda. Однако при печати данных я получаю '\ r' в конце значения последнего столбца каждой строки.

Я могу читать данные из CSV, и значения также вставляются в БД MySQL.

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']).

Как мне удалить '/ r' из списка fList [0]?

1 Ответ

0 голосов
/ 30 марта 2019

Вы можете удалить \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 заботится о eiter \n (Linux) или \r\n (Windows) - могут возникнуть проблемы, если вы создаете текстовые файлы с использованием окон и разбиваете их под unix - не уверен .

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