2016-07-19 14 views
0

Ich bin ziemlich neu in Python und Codierung im Allgemeinen, aber ich habe irgendwie herausgefunden, wie man eine Imgur-API zusammenfügt, um mir eine JSON-Out-Put-Datei zu geben. Mein Endziel ist es, die Datei in ein Excel mit einigen anderen bereits gesammelten Daten zu bringen, so dass ich in der Lage wäre, die API-Ausgabe in eine CSV zu konvertieren. - Bisher ist meine einzige Lösung, die JSON-Ausgabe zu nehmen und sie in einen Online-Konverter zu stellen (Ich habe versucht, was andere Leute online sagten, aber ich konnte es nie zum Laufen bringen.)Python Imgur API JSON-Ausgabe nach CSV

Hier ist eine Beispielausgabe von die JSON (ich bin mir ziemlich sicher, dass es keine verschachtelten Teile hat):

{"status": 200, "data": {"in_gallery": false, "deletehash": "pfSgnqtf9eh4r2B", "layout": "blog", "description": null, "title": null, "cover_height": 177, "views": 0, "privacy": "public", "cover": "P1tTbZw", "images_count": 2, "datetime": 1468959627, "account_url": "JosephL32", "favorite": false, "cover_width": 222, "link": "http://imgur.com/a/3I3H7", "is_ad": false, "section": null, "images": [{"datetime": 1468959628, "bandwidth": 0, "nsfw": null, "vote": null, "id": "P1tTbZw", "account_id": null, "in_gallery": false, "title": null, "section": null, "width": 222, "size": 48248, "type": "image/png", "is_ad": false, "deletehash": "mGqP4DFgDtBZG8Y", "description": null, "views": 0, "link": "http://i.imgur.com/P1tTbZw.png", "height": 177, "name": "Screen Shot 2016-07-19 at 4.20.05 PM", "favorite": false, "account_url": null, "animated": false}, {"datetime": 1468959630, "bandwidth": 0, "nsfw": null, "vote": null, "id": "5zGa1go", "account_id": null, "in_gallery": false, "title": null, "section": null, "width": 221, "size": 74481, "type": "image/png", "is_ad": false, "deletehash": "LnJxl5rltxsIFl2", "description": null, "views": 0, "link": "http://i.imgur.com/5zGa1go.png", "height": 152, "name": "Screen Shot 2016-07-19 at 4.19.59 PM", "favorite": false, "account_url": null, "animated": false}], "nsfw": null, "id": "3I3H7", "account_id": 37918982}, "success": true} 

um es zusammenzufassen ich bin auf der Suche nach dem Code python ich nach dem Aufstehen der JSON-Daten einfügen kann es als ein sparen CSV-Datei.

Vielen Dank im Voraus!

Antwort

0

Dies sollte nicht zu schwer sein, da sowohl JSON- als auch CSV-Dateistrukturen in Python mithilfe von Dictionaries relativ einfach dargestellt werden können. Zunächst aber sollte ich darauf hinweisen, dass die JSON-Daten in der Tat verschachtelt ist, die man sehen kann, wenn wir es schön formatieren:

{ 
    "status": 200, 
    "data": 
    { 
    "in_gallery": false, 
    "deletehash": "pfSgnqtf9eh4r2B", 
    "layout": "blog", 
    "description": null, 
    "title": null, 
    "cover_height": 177, 
    "views": 0, 
    "privacy": "public", 
    "cover": "P1tTbZw", 
    "images_count": 2, 
    "datetime": 1468959627, 
    "account_url": "JosephL32", 
    "favorite": false, 
    "cover_width": 222, 
    "link": "http://imgur.com/a/3I3H7", 
    "is_ad": false, 
    "section": null, 
    "images": 
    [ 
     { 
     "datetime": 1468959628, 
     "bandwidth": 0, 
     "nsfw": null, 
     "vote": null, 
     "id": "P1tTbZw", 
     "account_id": null, 
     "in_gallery": false, 
     "title": null, 
     "section": null, 
     "width": 222, 
     "size": 48248, 
     "type": "image/png", 
     "is_ad": false, 
     "deletehash": "mGqP4DFgDtBZG8Y", 
     "description": null, 
     "views": 0, 
     "link": "http://i.imgur.com/P1tTbZw.png", 
     "height": 177, 
     "name": "Screen Shot 2016-07-19 at 4.20.05 PM", 
     "favorite": false, 
     "account_url": null, 
     "animated": false 
     }, 
     { 
     "datetime": 1468959630, 
     "bandwidth": 0, 
     "nsfw": null, 
     "vote": null, 
     "id": "5zGa1go", 
     "account_id": null, 
     "in_gallery": false, 
     "title": null, 
     "section": null, 
     "width": 221, 
     "size": 74481, 
     "type": "image/png", 
     "is_ad": false, 
     "deletehash": "LnJxl5rltxsIFl2", 
     "description": null, "views": 0, 
     "link": "http://i.imgur.com/5zGa1go.png", 
     "height": 152, 
     "name": "Screen Shot 2016-07-19 at 4.19.59 PM", 
     "favorite": false, 
     "account_url": null, 
     "animated": false 
     } 
    ], 
    "nsfw": null, 
    "id": "3I3H7", 
    "account_id": 37918982 
    }, 
    "success": true 
} 

Die verschachtelte Struktur dieses JSON wird dieses Problem ein wenig komplizierter, da es machen enthält zwei Bildwörterbücher, die jeweils die gleichen Eigenschaften haben. Es ist nicht klar, wie genau Ihre endgültigen Daten formatiert werden sollen, aber ich werde mich dem nähern, um eine CSV mit einer Zeile für jedes Bild im Album auszugeben.

Das erste, was wir tun müssen, ist die JSON-String in einem Wörterbuch Python konvertieren:

import json 

json_dict = json.loads(raw_json) 

Jetzt können wir alle wichtigen Daten in json_dict['data'] und eine Liste der Bilder im Album zugreifen (dargestellt in Python als Wörterbücher) in json_dict['data']['images'].

Angenommen, Sie ausgeben möchten eine CSV mit datetime, title, link und name Attribute für jedes Bild sowie datetime, title, link und images_count Attribute für das Album, das jedes Bild in angezeigt wird. Wir werden zuerst Öffnen Sie eine neue CSV-Datei und schreiben Sie eine Reihe von Spaltenüberschriften oben, durchlaufen Sie dann die Bilder und schreiben Sie jeweils eine Zeile.

import csv 

# Open new CSV file 
with open("output.csv", "w") as csv_file: 
    writer = csv.writer(csv_file) 

    # Write CSV headers 
    writer.writerow(["datetime", "title", "link", "name", "album_datetime", 
        "album_title", "album_link", "album_images_count"]) 

    # Write data to CSV for each image 
    album_data = json_dict['data'] 
    images_data = json_dict['data']['images'] 
    for image in images_data: 
     writer.writerow([image['datetime'], 
          image['title'], 
          image['link'], 
          image['name'], 
          album_data['title'], 
          album_data['datetime'], 
          album_data['link'], 
          album_data['images_count']]) 
+0

Danke für die schnelle und detaillierte Antwort (die Art, wie Sie die CSV-Ausgabe einrichten, ist genau das, was ich suche) - immer noch einige Probleme. Ich bin auf Python 2.7. Ich bekomme eine Fehlermeldung, die auf den JSON-Decoder zeigt, wenn ich ihn starte: 'File" /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py ", Zeile 339, in Lasten return _default_decoder.decode (s) Datei "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", Zeile 364, entschlüsseln obj, end = self.raw_decode (s, idx = _w (s, 0) .end()) ' –

+0

Kein Problem! Ich habe meinen Code auf Python 2.7 unter OS X getestet, was so aussieht, als wäre es dieselbe Plattform, auf der Sie gerade arbeiten, und ich habe keine Fehler bekommen. Sind Sie sicher, dass das die ganze Fehlermeldung ist? Normalerweise gibt es unter dem Stack-Trace eine informativere Nachricht wie 'TypeError: ...'. –

+0

Update: Googeln der Fehlertext ergibt dies [StackOverflow post] (http://stackoverflow.com/questions/36387302/why-am-i-getting-decoder-errors-when-turning-my-json-array-into- a-Python-Liste-uns). Stellen Sie sicher, dass das, was Sie in 'json.loads()' übergeben, eigentlich eine Zeichenfolge ist und nicht etwas anderes. –