Boto3

2017-06-25 5 views
0

JSON出力を作成する私は以下のコードがあります。Boto3

import boto3 
import datetime 
import json 

now = datetime.datetime.now() 

cw = boto3.client('cloudwatch', region_name='sa-east-1') 
s3client = boto3.client('s3') 

# Get a list of all buckets 
allbuckets = s3client.list_buckets() 

# Iterate through each bucket 
for bucket in allbuckets['Buckets']: 
    # For each bucket item, look up the cooresponding metrics from CloudWatch 
    response = cw.get_metric_statistics(Namespace='AWS/S3', 
             MetricName='BucketSizeBytes', 
             Dimensions=[ 
              {'Name': 'BucketName', 'Value': bucket['Name']}, 
              {'Name': 'StorageType', 'Value': 'StandardStorage'}, 
             ], 
             Statistics=['Average'], 
             Period=3600, 
             StartTime=(now-datetime.timedelta(days=2)).isoformat(), 
             EndTime=now.isoformat() 
             ) 
    for item in response["Datapoints"]: 
      data = {} 
      data['data'] = [] 
      data['data'].append ({'#BUCKET_NAME': bucket["Name"]}) 
      json_str = json.dumps(data) 
      print json_str 

出力は次のとおりです。

{"data": [{"#BUCKET_NAME": "bucket1"}]} 
{"data": [{"#BUCKET_NAME": "bucket2"}]} 
{"data": [{"#BUCKET_NAME": "bucket3"}]} 
{"data": [{"#BUCKET_NAME": "bucket4"}]} 

が、私は次の形式で出力を必要とする:

{"data":[{"{#BUCKET_NAME}":"bucket1"},{"{#BUCKET_NAME}":"bucket2"}, 
      {"{#BUCKET_NAME}":"bucket3"},{"{#BUCKET_NAME}":"bucket4"}]} 

私を間違っている?

+0

最後の 'for'ループで' item'を使用していません。コードが正しいと確信していますか?どのようにその出力を取得していますか? – helloV

+0

はい...コードが実行されています。出力は "print json_str"です。 json_stringをテストしてファイルとファイルに書き込むと、同じ結果が得られます。 –

+0

あなたはデータポイントを取得していないことを理解していますか、バケット名を取得しています。 – helloV

答えて

1

新しい辞書を作成し、ループの各繰り返しで印刷します。あなたはバケット名をしたい場合は、単に以下のものが必要です。

# Iterate through each bucket 
data = [] 
for bucket in allbuckets['Buckets']: 
    data.append[{'#BUCKET_NAME': bucket["Name"]}] 
data = {'data':data} 
json_str = json.dumps(data) 
print json_str 

リストの内包表記を使用する場合:

data = [{'#BUCKET_NAME': bucket["Name"]} for bucket in allbuckets['Buckets']] 
data = {'data':data} 
json_str = json.dumps(data) 
print json_str 
+0

もう一度ありがとう!それは最高です! –

0

コードはここにある.... helloVヘルプの後:

import boto3 
import json 
import string 

s3client = boto3.client('s3') 
allbuckets = s3client.list_buckets() 

data = [{"{#BUCKET_NAME}":bucket["Name"]} for bucket in allbuckets['Buckets']] 
data = {"data":data} 
json_pre = json.dumps(data) 
json_pos = json_pre.translate(None, string.whitespace) 
print json_pos 

JSON形式に変換するには、空白を削除する必要があります。