2016-04-15 3 views
-1

N Dateien mit Wörterbücher-of-Listen-Datei, gespeichert als a.json, b.json ...Speicher mehrere Wörterbücher-of-Listen aus mehreren Dateien zu einem Wörterbuch, dann schreiben

{ 
"ELEC.GEN.OOG-AK-99.A": [ 
    ["2013", null], 
    ["2012", 2.65844], 
    ["2011", 2.7383] 
], 
"ELEC.GEN.AOR-AK-99.A": [ 
    ["2015", 217.30239], 
    ["2014", 214.46868], 
    ["2013", 197.32097] 
], 
"ELEC.GEN.HYC-AK-99.A": [ 
    ["2015", 1542.29841], 
    ["2014", 1538.738], 
    ["2013", 1345.665] 
]} 

Ich bin unklar, wie sie alle zu einem großen Wörterbuch/jSON-Datei zu speichern, wie so:

{ 
"a": 
    { 
    "ELEC.GEN.OOG-AK-99.A": [ 
     ["2013", null], 
     ["2012", 2.65844], 
     ["2011", 2.7383] 
    ], 
    "ELEC.GEN.AOR-AK-99.A": [ 
     ["2015", 217.30239], 
     ["2014", 214.46868], 
     ["2013", 197.32097] 
    ], 
    "ELEC.GEN.HYC-AK-99.A": [ 
     ["2015", 1542.29841], 
     ["2014", 1538.738], 
     ["2001", 1345.665] 
    ]}, 
"b": {...}, 
... 
} 

Diese Daten sind ich gefordert, dass in einer Javascript-Grafik verwendet werden, und es ist theoretisch möglich, Vorprozess es noch beim Streamen der angeforderte Daten von seiner Quelle, sowie möglicherweise möglich t o Umgehen Sie die Tatsache, dass es so viele Datendateien gibt, die ich anfordern muss, damit mein Graph funktioniert, aber beide Optionen scheinen sehr schwierig zu sein.

Ich verstehe nicht den besten Weg, json-das-ist-gemeint-für-Javascript in Python zu analysieren.

==== ich versucht habe:

from collections import defaultdict 

# load into memory 
data = defaultdict(dict) 
filelist = ["a.json", "b.json", ...] 
for fn in filelist: 
    with open(fn, 'rb') as f: 
     # this brings up TypeError 
     data[fn] = json.loads(f) 

# write 
out = "out.json" 
with open(out, 'wb') as f: 
    json.dump(data, f) 

=== Für json.loads() bekomme ich TypeError: expected string or buffer. Für json.load() funktioniert es!

+0

Sie müssen einige * * Code Sie dies getan haben, um zu versuchen. Was hast du bis jetzt gemacht? Kannst du deinen Code zeigen? Erkläre, welche Schwierigkeiten du hast. A [mcve] würde dir hier wirklich helfen. – idjaw

+0

'new_dict = {'a': altes_Dikt, ...}', dann vielleicht 'json_data = json.dumps (neues_Dikt)', und dann das in eine Datei speichern? – bozdoz

+0

@bozdoz, das alte_Dikt (mehrere) sind in anderen Dateien geschrieben, und das JSON-Modul will es nicht lesen: "TypeError: ist nicht JSON serializable", oder "TypeError: erwartete Zeichenfolge oder Puffer" – ehacinom

Antwort

1

laden von string:

>>> with open("a.json", "r") as f: 
...  json.loads(f.read()) 
... 
{u'Player2': 4, u'Player3': 10, u'Player1': 3} 
>>> 

Laden von Dateiobjekt:

>>> with open("a.json", "r") as f: 
...  json.load(f) 
... 
{u'Player2': 4, u'Player3': 10, u'Player1': 3} 
>>> 
1

Sie json.loads statt json.load verwenden, eine Datei zu laden, müssen Sie es auch für String zum Lesen öffnen, statt Bytes, so dass diese ändern:

with open(fn, 'rb') as f: 
    data[fn] = json.loads(f) 

dazu:

with open(f, 'r') as f: #only r instead of rb 
    data[fn] = json.load(f) #load instead of loads 

Und wieder weiter unten beim Schreiben für w anstelle von wb

Verwandte Themen