Использование байтов ввода-вывода Python в AWS Lambda и вторая итерация файла CSV - PullRequest
0 голосов
/ 07 марта 2019

У меня есть CSV-файл с именем myref.csv и список как ref_list:

myref.csv

name,Dept,City
sree,NULL,Bengaluru
vatsasa,,Hyd
,,VJA
capgemini,,TPTY
DTP,,
Bengaluru,NULL,TVM
sre,NULL,MNGL
vatsas,,Kochi
,NULL,TVM
capgemin,NULL,MNGL
DTP9,NULL,Kochi
NULL,NULL,TVM
sree0,NULL,MNGL

ref_list:

ref_list=['Name', 'Dept', 'City', 'Address']

У меня написан следующий код:

response = s3.get_object(Bucket=src_bucket, Key=key)
lines = response['Body'].read().splitlines(True)
reader = csv.reader(lines)
first_row = next(reader)
readers=list(reader)
    ...............
    *#done something here using **'readers'**, which is out of scope for this post*
    ...............
csv_buffer = BytesIO()   #Problem has started here..
writer=csv.writer(csv_buffer)
content=csv_buffer.getvalue()
inser_null_at=[]
for i, header in enumerate(ref_list):
    if header not in first_row:
        inser_null_at.append(i)
    writer.writerow(ref_list)
for row in readers:
    for i in inser_null_at:
        row.insert(i, "")
    writer.writerow([item if item != "" else "NULL" for item in row])

Я прочитал файл myref.csv через csv.reader и назначен переменной 'reader'.Я написал несколько команд, чтобы использовать «читатель».Но эти команды выходят за рамки этого сообщения.

Так как csvfile повторяется один раз и не может использовать его для второй итерации, формат списка для reader назначается другой переменной с именем 'reader'.

Я хотел бы проверить все столбцы списка ref_list, присутствующие в myref.csv.

1. If present, check whether any one of the columns in myref.csv contains spaces. If spaces are present, replace spaces with value NULL and write all the columns to a new csv file, csvfile3, column-wise.

2. If not present, write those missing columns along with existing ones to csvfile3. In addition, values of those missing columns should be shown as NULL in csvfile3, and spaces under existing columns should be replaced with NULL 

Как я уже писал в AWS lambda, и, возможно, нам нужно обработать огромные файлы CSV, которые я создалBytesIO() для переменной csv_buffer и попытка записать вывод в эту переменную.В конце файл будет скопирован из буфера в объект в корзине AWS S3, который еще не записан.

Но операторы, начинающиеся с csv_buffer = BytesIO(), не выполняются.Поэтому пытаемся узнать, где совершена ошибка.

Ожидаемый результат:

name,Dept,City,Address
sree,NULL,Bengaluru,NULL
vatsasa,NULL,Hyd,NULL
NULL,NULL,VJA,NULL
capgemini,NULL,TPTY,NULL
DTP,NULL,NULL,NULL
Bengaluru,NULL,TVM,NULL
sre,NULL,MNGL,NULL
vatsas,NULL,Kochi,NULL
NULL,NULL,TVM,NULL
capgemin,NULL,MNGL,NULL 
DTP9,NULL,Kochi,NULL
NULL,NULL,TVM,NULL
sree0,NULL,MNGL,NULL

Фактический результат: None

Примечание: это было написанона AWS лямбда

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