Bei Projekten mit AWS gibt es einige Fälle, in denen Sie eine Liste von AMIs dokumentieren möchten.
In einem solchen Fall möchten Sie manchmal Daten in JSON mit der offiziellen AWS-CLI erfassen, in CSV konvertieren und dann in ein Dokument kompilieren. Tabellendaten, die in Dokumenten häufig vorkommen, sind sehr inkompatibel mit JSON, was ein Problem darstellt.
Tun Sie dies in einem solchen Fall. Angenommen, Sie können den JSON der AMI-Liste wie folgt abrufen.
images.json
{
"Images": [
{
"VirtualizationType": "hvm",
"Name": "hogehoge_1",
"Hypervisor": "xen",
"SriovNetSupport": "simple",
"ImageId": "ami-99999991",
"State": "available",
"BlockDeviceMappings": [
{
"DeviceName": "/dev/xvda",
"Ebs": {
"DeleteOnTermination": true,
"SnapshotId": "snap-9999999d",
"VolumeSize": 100,
"VolumeType": "standard",
"Encrypted": false
}
}
],
"Architecture": "x86_64",
"ImageLocation": "999999999993/hogehoge1",
"RootDeviceType": "ebs",
"OwnerId": "999999999999",
"RootDeviceName": "/dev/xvda",
"CreationDate": "2014-12-17T06:35:39.000Z",
"Public": false,
"ImageType": "machine",
"Description": null
},
{
"VirtualizationType": "hvm",
"Name": "hogehoge_2",
"Hypervisor": "xen",
"SriovNetSupport": "simple",
"ImageId": "ami-99999991",
"State": "available",
"BlockDeviceMappings": [
{
"DeviceName": "/dev/xvda",
"Ebs": {
"DeleteOnTermination": true,
"SnapshotId": "snap-9999999d",
"VolumeSize": 100,
"VolumeType": "standard",
"Encrypted": false
}
}
],
"Architecture": "x86_64",
"ImageLocation": "999999999993/hogehoge1",
"RootDeviceType": "ebs",
"OwnerId": "999999999999",
"RootDeviceName": "/dev/xvda",
"CreationDate": "2014-12-17T06:35:39.000Z",
"Public": false,
"ImageType": "machine",
"Description": null
},
]
}
Ändern Sie diesen JSON mithilfe von Python in CSV. Ich habe es improvisiert, also denke ich, dass es verschiedene Anstürme gibt, aber es tut mir leid. Es tut mir wirklich leid.
sample.py
# coding:UTF-8
import json
import codecs
#Variablendefinition. Kitto
sourcefilename = "images.json"
outfilename = "outfile.csv"
targetDataName = "Images"
#Funktionsdefinition
def list2str(srclist,startStr,endStr):
#Wenn es keine Liste ist, konvertieren Sie sie nicht.
if not (isinstance(srclist,list)):
return srclist
#Liste in Zeichenfolge ändern
resultStr = ""
resultStr += startStr
for item in srclist:
tmp = ""
if isinstance(item,str):
tmp += item +","
elif isinstance(item,list):
tmp += list2str(item,"","") + ","
else:
tmp += str(item) + ","
resultStr += tmp
resultStr += endStr
return resultStr
#Datei lesen
sourceFile = open(sourcefilename,"r")
sourceData = json.load(sourceFile)
sourceFile.close()
#Holen Sie sich die gewünschten Daten aus JSON-Daten
targetData = sourceData.get(targetDataName)
#Header abrufen
headerSet = set()
for row in targetData:
colList = row.keys()
for colName in colList:
headerSet.add(colName)
headerstr = ""
for headerName in headerSet:
headerstr += headerName + ","
#Header-Erfassung abgeschlossen
#Datenerfassung
datalist = list()
for row in targetData:
rowstr = ""
for colName in headerSet:
if isinstance(row.get(colName),list):
rowstr += list2str(row.get(colName),"\"","\"") + ","
elif isinstance(row.get(colName),bool):
tmpStr = str(row.get(colName))
rowstr += tmpStr + ","
elif isinstance(row.get(colName),unicode):
rowstr += row.get(colName) + ","
elif isinstance(row.get(colName),type(None)):
rowstr += "None,"
datalist.append(rowstr)
#Öffnen Sie die Schreibdatei
outfile = codecs.open(outfilename,"w", "shift_jis")
outfile.write(headerstr + "\n")
for rowstr in datalist:
outfile.write(rowstr + "\n")
outfile.close()
Jetzt können Sie CSV-Daten erstellen. Nach der Konvertierung in CSV-Daten können diese in Excel geöffnet und auf verschiedene Arten bearbeitet werden.
Ich kannte Python vorher nicht, also habe ich Werkzeuge in Java erstellt, aber Python ist sehr praktisch. Für die AWS CLI ist Python erforderlich, sodass kein neues Python hinzugefügt werden muss. Ich denke, ich werde Python ernsthaft studieren.
Ich hoffe, Sie finden es nützlich.
Recommended Posts