Как загрузить файл шаблона из amazon s3 и загрузить его в книгу openpyxl - PullRequest
0 голосов
/ 01 октября 2019

Я настраиваю приложение Python без сервера, используя aws lambda и python для преобразования файла csv в excel.
Я хочу загрузить файл csv и файл шаблона excel в корзину s3. Затем создайте файл Excel, используя файл шаблона.
Я успешно прочитал данные csv в свое приложение, используя boto3. Теперь я хочу записать содержимое в файл шаблона Excel.
Как я могу это сделать?
Я где-то читал, что мы можем скопировать файл шаблона в / tmp в s3 и можно записать в него. Если да, то как это возможно?

1 Ответ

0 голосов
/ 02 октября 2019

С помощью лямбды вы можете загрузить файл с S3, загрузить его с openpyxl, затем внести изменения в него и затем загрузить его на S3.

from openpyxl import load_workbook
from tempfile import NamedTemporaryFile
import boto3
import botocore

s3 = boto3.resource('s3')

def download_file(bucket, key):
    try:
        file = NamedTemporaryFile(delete=False)
        s3.Bucket(bucket).download_file(key, file.name)
        return file.name
    except botocore.exceptions.ClientError as e:
        if e.response['Error']['Code'] == "404":
            return None
        else:
            raise
    else:
        raise

def upload_workbook(workbook, bucket, key):
    with NamedTemporaryFile() as tmp:
        workbook.save(tmp.name)
        tmp.seek(0)
        s3.meta.client.upload_file(tmp.name, bucket, key)


file = download_file("your-s3-bucket", "your-s3-key")
workbook = load_workbook(file)
# process workbook

upload_workbook(workbook, "your-bucket", "your-key")

...