Python 3.x 如何从AmazonS3加载模板文件并将其加载到openpyxl工作簿中
我正在使用aws lambda和python设置一个无服务器python应用程序,用于将csv文件转换为excel。 我想上传一个csv文件和一个excel模板文件到s3 bucket中。然后使用模板文件创建一个excel文件。 我已经使用boto3成功地将csv数据读取到我的应用程序中。现在我想将内容写入excel模板文件。 我该怎么做?Python 3.x 如何从AmazonS3加载模板文件并将其加载到openpyxl工作簿中,python-3.x,amazon-s3,aws-lambda,openpyxl,xlsx,Python 3.x,Amazon S3,Aws Lambda,Openpyxl,Xlsx,我正在使用aws lambda和python设置一个无服务器python应用程序,用于将csv文件转换为excel。 我想上传一个csv文件和一个excel模板文件到s3 bucket中。然后使用模板文件创建一个excel文件。 我已经使用boto3成功地将csv数据读取到我的应用程序中。现在我想将内容写入excel模板文件。 我该怎么做? 我在某处读到,我们可以将模板文件复制到s3中的/tmp中,并可以写入其中。如果是这样,怎么可能呢?使用lambda,您可以从S3下载一个文件,用openpy
我在某处读到,我们可以将模板文件复制到s3中的/tmp中,并可以写入其中。如果是这样,怎么可能呢?使用lambda,您可以从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(suffix = '.xlsx', 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")