Это код Python, который я использовал для манипулирования файлом table1 с помощью ссылочного файла pds_ref. Таким образом, pds_ref выглядит так:
|THE_TABLE|THE_KEY
|table1|3
|table1|1
table1 выглядит так
|ID|NAME
|1|Imran
|2|Peter
|3|Pedro
|4|Carlos
Идея состоит в том, чтобы использовать ссылки в pds_ref, чтобы удалить записи из любой таблицы, которая указана в списке, и соответствующий ей ключ ... в этом случае 1 и 3 должны быть удалены
Этот код Python работает так же, как импорт Python CSV
with open("pds_ref","rb") as ref_file:
refreader=csv.DictReader(ref_file, delimiter='|')
reftable=[row for row in refreader]
refheader = refreader.fieldnames
for refrow in reftable:
print refrow['THE_TABLE']
print refrow['THE_KEY']
with open(refrow['THE_TABLE'], "rbw") as infile:
reader = csv.DictReader(infile, delimiter='|')
table = [row for row in reader]
header = reader.fieldnames
with open(refrow['THE_TABLE'], "wb") as outfile:
writer = csv.DictWriter(outfile, header,delimiter='|')
writer.writeheader()
for row in table:
if row['ID'] != refrow['THE_KEY'] :
writer.writerow(row)
Теперь я хочу сделать это с помощью лямбды, чтобы эта функция запускалась каждый раз, когда кто-то загружает файл pds_ref
Я дошел до возможности получить файл pds_ref и прочитать каждыйстрока, но возникают проблемы с аналогичным открытием и записью измененного файла table1.Любая помощь приветствуется.
import boto3
import csv
import io
def lambda_handler(event, context):
s3 = boto3.client("s3")
if event:
print ("Event : ", event)
file_obj = event["Records"][0]
filename = str(file_obj['s3']['object']['key'])
bucketname = str(file_obj['s3']['bucket']['name'])
print("Filename: ",filename)
print("Bucket: ",bucketname)
fileObj = s3.get_object(Bucket= "lambda-trig1",Key=filename)
print ("fileObj: ",fileObj)
file_content = fileObj["Body"].read().decode('utf-8')
print(file_content)
f_pds_ref = s3.get_object(Bucket= "lambda-trig1",Key='pds_ref')
fc_pds_ref = f_pds_ref['Body'].read().decode('utf-8').splitlines(True)
for refrow in csv.DictReader(fc_pds_ref,delimiter='|'):
print refrow['THE_TABLE']
print refrow['THE_KEY']
current_table = refrow['THE_TABLE']
current_key = refrow['THE_KEY']
f_the_next_table = s3.get_object(Bucket= "lambda-trig1",Key=current_table)
fc_the_next_table = f_the_next_table['Body'].read().decode('utf-8').splitlines(True)
with open(refrow[f_the_next_table], "rbw") as infile:
reader = csv.DictReader(infile, delimiter='|')
# table = [row for row in reader]
# header = reader.fieldnames
# print (header)