2016-12-16 31 views
1

Zugriff habe ich eine JSON-Datei, die ich in csv hier konvertieren will, meine Codes sindeine json Liste in einer anderen Liste in Python

data=[] 
with open('filename.json') as f: 
    for line in f: 
     data.append(json.loads(line)) 
f=csv.writer(open('filename.csv','wb+')) 
for item in data: 
    f.writerow([item['locations'][0]['time']]) 

Die json drei weitere Listen innerhalb enthält und jede Liste hat das gleiche Attribut Namen. Ich kann nur auf Daten in der ersten Liste zugreifen; wenn ich f.writerow([item['locations'][0]['time']]) zu f.writerow([item['locations'][-1]['time']]) ändere, gibt es mir Zugang zur ersten und dritten Liste (die erste und dritte Liste zu csv schreibend), aber es überspringt die zweite Liste. Wie kann ich auf alle Attribute in den Listen 1-3 zugreifen?

Dies ist Teil einer einzigen Linie meiner json

locations:[ 
{time : 1439319674334 
longitude : 1.070336 
local_time : "20:01:14:334 11 08 2015 +0100 GMT+01:00" 
latitude : 51.2997804}, 
{time : 1439319694428 
longitude : 1.0703332 
local_time : "20:01:34:428 11 08 2015 +0100 GMT+01:00" 
latitude : 51.2997889}, 

{time : 1439319714638 
longitude : 1.0703123 
local_time : "20:01:54:638 11 08 2015 +0100 GMT+01:00" 
latitude : 51.2997794} 
+0

Ist die 'Stellen' einer der Schlüssel im JSON-Objekt, das Sie in der Datei haben. Auch ich denke, Schlüssel, den Sie erwähnt haben, ist eine Zeichenfolge mit Anführungszeichen '' 'zum Beispiel:' "time" ' –

Antwort

0

Sie Ihr Leben würde viel einfacher mit die CSV-Bibliothek. Hier versuchen diese

Try this:

In [75]: import csv 
In [70]: j = {'locations':[ 
    ...: {'time' : 1439319674334, 
    ...: 'longitude' : 1.070336, 
    ...: 'local_time' : "20:01:14:334 11 08 2015 +0100 GMT+01:00", 
    ...: 'latitude' : 51.2997804}, 
    ...: {'time' : 1439319694428, 
    ...: 'longitude' : 1.0703332, 
    ...: 'local_time' : "20:01:34:428 11 08 2015 +0100 GMT+01:00", 
    ...: 'latitude' : 51.2997889}, 
    ...: 
    ...: {'time' : 1439319714638, 
    ...: 'longitude' : 1.0703123, 
    ...: 'local_time' : "20:01:54:638 11 08 2015 +0100 GMT+01:00", 
    ...: 'latitude' : 51.2997794}]} 
    ...: 
    ...: 
In [74]: with open('output.csv', 'wb+') as f: 
    ...:  writer = csv.DictWriter(f, fieldnames=j['locations'][0].keys()) 
    ...:  writer.writeheader() 
    ...:  for item in j['locations']: 
    ...:   writer.writerow(item) 

Sie Ausgabe wie folgt erhalten:

csvout (might be broken)

+0

Dank Kelvin für eine schnelle Antwort, so weit ich kann es schaffen, den csv wie in ihren ergebnissen zu schreiben, meine frage ist, wie kann ich die drei lists in eine einzelne zeile setzen, wie 'latitude 1', 'local_time1', 'longitude1', 'time1', 'latute2', 'local_time2', 'longitude2' .... in einer einzigen Zeile nicht drei Zeilen – dm5

+0

@DEOGRATIASMZURIKWAO das ist viel mehr beteiligt Sorry, das war nicht, was ich von der Frage bekommen habe. Ich kann versuchen, vielleicht später nachzusehen, aber im Moment habe ich nicht die Bandbreite, um eine vollständige Lösung zu schreiben: \ – Kelvin

+0

Es ist ok, aber es war sehr hilfreich.Ich versuchte, die oben genannten Konzepte zu verwenden, um eine JSON-Datei mit Th for-Schleife zu konvertieren und das gleiche Ergebnis zu haben csv Format wie du und ich habe erwartet, einfach zu sein, da ich mit einer einzigen Zeile, dem fil, fertig bin e hat ungefähr 10.000 Linien, Hilfe wird geschätzt. – dm5

0

Datei Diese einzelne Zeile kann durch folgenden Code in csv umgewandelt werden:

locations:[ 
{time : 1439319674334 
longitude : 1.070336 
local_time : "20:01:14:334 11 08 2015 +0100 GMT+01:00" 
latitude : 51.2997804}, 
{time : 1439319694428 
longitude : 1.0703332 
local_time : "20:01:34:428 11 08 2015 +0100 GMT+01:00" 
latitude : 51.2997889}, 
{time : 1439319714638 
longitude : 1.0703123 
local_time : "20:01:54:638 11 08 2015 +0100 GMT+01:00" 
latitude : 51.2997794} ] 

file = open("filename.csv","a") 

file.write("time, longitude, local_time, latitude\n")  

for location in locations: 
    st = location['time'] + "," + location['longitude '] + "," + location['longitude'] + "," + location['latitude '] + "\n" 
    file.write(st) 
+0

Datei ohne einen Context-Manager öffnen, und selbst csv-Dateien schreiben ist sehr schlechte Praxis. – Kelvin

Verwandte Themen