Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何从AmazonS3加载模板文件并将其加载到openpyxl工作簿中_Python 3.x_Amazon S3_Aws Lambda_Openpyxl_Xlsx - Fatal编程技术网

Python 3.x 如何从AmazonS3加载模板文件并将其加载到openpyxl工作簿中

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

我正在使用aws lambda和python设置一个无服务器python应用程序,用于将csv文件转换为excel。 我想上传一个csv文件和一个excel模板文件到s3 bucket中。然后使用模板文件创建一个excel文件。 我已经使用boto3成功地将csv数据读取到我的应用程序中。现在我想将内容写入excel模板文件。 我该怎么做?
我在某处读到,我们可以将模板文件复制到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")