Я читаю csv из корзины S3 в Lambda, используя python 3. Я делаю небольшую очистку и преобразовываю ее в текстовый файл TSV. Когда я проверяю файл, который хранится локально, открывая файл в python и распечатывая его содержимое, я ожидаю, что мой вывод будет таким. Но когда я смотрю на файл, загруженный на S3, файл очень большой и имеет действительно неожиданное содержимое.
Я попробовал тот же код локально (без загрузки на S3), и файл выглядит хорошо. Я также попытался просто записать данные непосредственно в выходной файл (без добавления даты или чего-либо еще), и на S3 все выглядит хорошо. Когда я добавляю дату в начало каждой строки и загружаю на S3, это выглядит странно.
import csv
import boto3
from datetime import date
def lambda_handler(event, context):
s3_client = boto3.client('s3')
for record in event['Records']:
bucket = record['s3']['bucket']['name']
key = unquote_plus(record['s3']['object']['key'])
csvfile = s3_client.get_object(Bucket=bucket, Key=key)
today=str(date.today())
infile = today+'_input'
outfile = today+'_output'
download_path = '/tmp/{}.csv'.format(infile)
upload_path = '/tmp/{}.txt'.format(outfile)
s3_client.download_file(bucket,key,download_path)
with open(download_path, 'r') as in_f:
with open (upload_path, 'w') as out_f:
r = csv.reader(in_f,delimiter=',',quotechar='"')
w = csv.writer(out_f,delimiter='\t',quoting=csv.QUOTE_MINIMAL)
for line in r:
line.insert(0,today)
print(line)
w.writerow(line)
s3_client.upload_file(upload_path,bucket,'newTSV.txt')
ОЖИДАЕМАЯ ЛИНИЯ в TSV:
2019-10-04 U.S. Dollars HEDGE FUND MyFund,LLC|23A 1736
АКТУАЛЬНАЯ ЛИНИЯ в TSV:
2019-10-04 "2019-10-04 ""2019-10-04 """"2019-10-04 """"""""2019-10-04 """"""""""""""""2019-10-04 """"""""""""""""""""""""""""""""