Я пытаюсь написать AWS лямбда-функцию в Python, чтобы собрать набор CSV-файлов из корзины s3, объединить их, удалить дубликаты и записать результат обратно в s3. Файлы, которые я хочу прочитать, хранятся с префиксом / в папке на s3. В настоящее время я пытаюсь прочитать файлы по одному, используя следующее приложение:
resp = s3.list_objects_v2(Bucket='mybucket')
#getting all objects in the bucket in a list
for obj in resp['Contents']:
keys.append(obj['Key'])
#filtering those that are parsed entries
files = [k[6:] for k in keys if 'links/links' in k]
#reading into combined list
for file in files:
with open(file, 'r') as csvfile:
reader = csv.reader(csvfile)
links = links + list(reader)
В настоящее время я получаю следующую ошибку:
{
"errorMessage": "[Errno 2] No such file or directory: 'links2020-02-27 14:59:49.933074.csv'",
"errorType": "FileNotFoundError",
"stackTrace": [
" File \"/var/task/handler.py\", line 21, in concatenatelinks\n with open(file, 'r') as csvfile:\n"
]
}
В более ранней версии я не делал t нарезать имена файлов, что вызвало ту же ошибку. Так нужно ли загружать все файлы в / tmp / с чем-то вроде s3.meta.client.upload_file('/tmp/' + str(filename), bucket, 'fusedlinks/' + str(filename))
, чтобы сделать их доступными для функции lamda, или есть более элегантное решение для этого?