[PYTHON] Je convertis les données AWS JSON en CSV comme ceci

Pour les projets utilisant AWS, il arrive souvent que vous souhaitiez documenter une liste d'AMI.

Dans un tel cas, il arrive que vous souhaitiez acquérir des données au format JSON avec l'interface de ligne de commande officielle AWS, les convertir en CSV, puis les compiler dans un document. Les données tabulaires, qui sont courantes dans les documents, sont très incompatibles avec JSON, ce qui pose problème.

Dans un tel cas, faites ceci. Par exemple, supposons que vous puissiez obtenir le JSON de la liste AMI comme ceci.

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
        }, 
    ]
}

Changez ce json en CSV en utilisant python. Je l'ai fait improvisé, donc je pense qu'il y a plusieurs rushes, mais je suis désolé. Je suis vraiment désolé.

sample.py


# coding:UTF-8
import json
import codecs

#Définition variable. Kitto
sourcefilename = "images.json"
outfilename = "outfile.csv"
targetDataName = "Images"
#Définition des fonctions
def list2str(srclist,startStr,endStr):
    #Si ce n'est pas une liste, ne la convertissez pas.
    if not (isinstance(srclist,list)):
        return srclist
    #Changer la liste en chaîne
    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

#Lecture de fichier
sourceFile = open(sourcefilename,"r")
sourceData = json.load(sourceFile)
sourceFile.close()
#Obtenez les données souhaitées à partir des données JSON
targetData = sourceData.get(targetDataName)

#Obtenir l'en-tête
headerSet = set()
for row in targetData:
    colList = row.keys()
    for colName in colList:
        headerSet.add(colName)
headerstr = ""
for headerName in headerSet:
    headerstr += headerName + ","
#Acquisition d'en-tête terminée

#L'acquisition des données
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)

#Ouvrez le fichier d'écriture
outfile = codecs.open(outfilename,"w", "shift_jis")
outfile.write(headerstr + "\n")
for rowstr in datalist:
    outfile.write(rowstr + "\n")
outfile.close()

Vous pouvez maintenant créer des données CSV. Une fois converti en données CSV, il peut être ouvert dans Excel et édité de différentes manières.

Je ne connaissais pas Python auparavant, donc j'avais l'habitude de créer des outils en Java, mais Python est très pratique. AWS CLI nécessite Python, il n'est donc pas nécessaire d'ajouter un nouveau Python. Je pense que je vais étudier Python sérieusement.

J'espère que tu trouves cela utile.

Recommended Posts

Je convertis les données AWS JSON en CSV comme ceci
Convertir des données Excel en JSON avec python
Quoi qu'il en soit, je veux vérifier facilement les données JSON
Convertir les données au format json en txt (en utilisant yolo)
Convertir json en Excel
Comment convertir un fichier JSON en fichier CSV avec Python Pandas
Comment convertir des fichiers Json au format CSV ou au format EXCEL
Convertissez rapidement SDF en CSV
Convertir l'objet Statut Tweepy en JSON
Je souhaite convertir des données détenues verticalement (type long) en données détenues horizontalement (type large)
[Bases de la science des données] J'ai essayé d'enregistrer de csv à mysql avec python
Je souhaite convertir une table convertie en PDF en Python en CSV
J'ai essayé de créer le téléchargement CSV, le traitement des données, la fonction de téléchargement avec Django
[Python] Comment convertir un fichier db en csv
Convertir les données au format XML en données au format txt (yolov3)
Entrée / sortie de données en Python (CSV, JSON)
Comment convertir csv en tsv dans la CLI
[Python] Convertit les délimiteurs de fichier csv en délimiteurs de tabulation
Convertir de PDF en CSV avec pdfplumber
Convertir (compresser) une chaîne de caractères JSON formatée en JSON 1 ligne
[MNIST] Convertir les données en PNG pour les keras
Convertir les données de la grille en données contenant des lignes (?) À l'aide de pandas
Convertissez des données FX 1 minute en données 5 minutes avec Python
Je veux jouer avec aws avec python
J'ai essayé de sauvegarder les données récupérées au format CSV!
Convertir un tableau (struct) en json avec golang
Je suis tombé sur un code de caractère lors de la conversion de CSV en JSON avec Python
Convertir les données csv, tsv en une matrice avec MovieLens en utilisant python comme exemple
Essayez d'utiliser django-import-export pour ajouter des données csv à django
Convertissez les données avec la forme (nombre de données, 1) en (nombre de données,) avec numpy.
[Python] Conversion de DICOM en PNG ou CSV
[Introduction à json] Non, j'en étais accro. .. .. ♬
J'ai essayé de sauvegarder les données avec discorde
Je veux frapper 100 sciences des données avec Colaboratory
Je veux visualiser les fichiers csv en utilisant Vega-Lite!
J'ai essayé d'obtenir des données CloudWatch avec Python
[Introduction à Python] Comment gérer les données au format JSON
Convertir des fichiers CSV UTF-8 pour les lire dans Excel
Je veux obtenir les données de League of Legends ③
Je veux obtenir les données de League of Legends ②
Écrire des données CSV sur AWS-S3 avec AWS-Lambda + Python
Convertir XLSX en CSV sur la ligne de commande
Je veux obtenir les données de League of Legends ①
J'aimerais en savoir plus sur Django page nation
[AWS] Migrer les données de DynamoDB vers Aurora MySQL