csv上传功能工作,但错误,如果我想填写内容

2024-09-29 19:19:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个函数,为我创建一个报告并将其上传到S3。但是,我在用内容填充CSV文件时遇到了问题。在这里您可以看到代码:

import boto3
import re
import csv

def lambda_handler(event,context):
    client = boto3.client('ce')
    response = client.get_cost_and_usage(
        TimePeriod={
            'Start': "2019-05-15",
            'End':  "2019-07-05"
        },
        Granularity='MONTHLY',
        Metrics=['BlendedCost'],
        GroupBy=[
            {
                'Type': 'TAG',
                'Key': 'Project'
            },
        ]
    )

    csv_testerinho = csv.writer(open("/tmp/csv_testerinho.csv", "w+"))
    csv_testerinho.writerow(["Account Name", "Month", "Cost"])

    #writing rows in csv
    for detail in response:
       csv_testerinho.writerow([response['Start'],
                                response['End'],
                                response['BlendedCost']
                                ])

    client = boto3.client('s3')
    client.upload_file('/tmp/csv_testerinho.csv', 'bucket_name','final_testerinho.csv')

执行代码时,出现以下错误:

Response:
{
  "errorMessage": "'Start'",
  "errorType": "KeyError",
  "stackTrace":
}

我要怎么做才能用通过API获得的信息填充CSV?你知道吗


Tags: csv函数代码inimportclientresponseboto3
1条回答
网友
1楼 · 发布于 2024-09-29 19:19:26

您应该使用以下方法检索开始和结束时间,其中n是ResultsByTime列表的索引:

  • 响应['ResultsByTime'][n]['TimePeriod']['Start']
  • 响应['ResultsByTime'][n]['TimePeriod'['End']

或者你可以写:

for result in response['ResultsByTime']:
    start = result['TimePeriod']['Start']
    end = result['TimePeriod']['End']

因此,将此应用于代码:

with open("/tmp/csv_testerinho.csv", "w+") as fd:
    csv_testerinho = csv.writer(fd)
    csv_testerinho.writerow(["Start", "End", "Cost"])

    for result in response['ResultsByTime']:
        start = result['TimePeriod']['Start']
        end = result['TimePeriod']['End']
        total_cost = 0.0
        for group in result['Groups']:
            cost = group['Metrics']['BlendedCost']['Amount']
            total_cost += float(cost)
        csv_testerinho.writerow([
            start,
            end,
            total_cost
        ])

您将需要再次检查我是如何检索和汇总混合成本的,因为解决这个问题并不是很简单。如果打印出返回的responsedict对象,您将看到它包含的内容。你知道吗

顺便说一句,你似乎正在写列标题帐户名称,月份和成本,但写行包含开始时间,结束时间和成本,这看起来是一个问题。你知道吗

有关响应的更多详细信息,请参见get_cost_and_usage reference。你知道吗

相关问题 更多 >

    热门问题