Python: Es wird versucht, mehrere JSON-Objekte in einer Datei zu deserialisieren, wobei jedes Objekt mehrere, aber gleichmäßig beabstandete Zeilen umfasst

Ok, nach fast einer Woche recherche habe ich werde Ihnen SO ein Schuss. Ich habe eine text Datei, die wie folgt aussieht (mit den 3 separaten json-Objekte als Beispiel, aber die Datei hat 50K):

{
"zipcode":"00544",
"current":{"canwc":null,"cig":7000,"class":"observation"},
"triggers":[178,30,176,103,179,112,21,20,48,7,50,40,57]
}
{
"zipcode":"00601",
"current":{"canwc":null,"cig":null,"class":"observation"},
"triggers":[12,23,34,28,100]
}
{
"zipcode":"00602",
"current":{"canwc":null,"cig":null,"class":"observation"},
"triggers":[13,85,43,101,38,31]
}

Ich wissen, wie die Arbeit mit JSON-Objekten mit Hilfe der Python-json-Bibliothek, aber ich habe eine Herausforderung, mit, wie man erstellen Sie 50 tausend verschiedene json-Objekte aus der Lektüre der Datei. (Vielleicht bin ich auch nicht über dieses denken richtig, aber letztendlich muss ich zu Deserialisieren und laden in eine Datenbank), die ich ausprobiert habe itertools denken, dass ich brauche einen generator, so war ich in der Lage zu verwenden:

with open(file) as f:
    for line in itertools.islice(f, 0, 7): #since every 7 lines is a json object
        jfile = json.load(line)

Aber der oben wird offensichtlich nicht funktionieren, da es nicht das Lesen der 7 Linien als eine einzige json-Objekt, und ich bin mir auch nicht sicher, wie iteriere über die gesamte Datei und laden Sie die einzelnen json-Objekte.

Folgende würde mir eine Liste, ich kann slice:

list(open(file))[:7]

Jede Hilfe wäre wirklich zu schätzen.


Extrem nahe, was ich brauche, und ich denke, nur einen Schritt entfernt, aber immer noch etwas Mühe mit iteration. Dies wird endlich mir ein iterativer Ausdruck, der alle dataframes aber wie mache ich es so, dass ich capture one giant dataframe mit allen Stücken im wesentlichen verkettet? Dann konnte ich exportieren, die Letzte dataframe, csv etc. (Auch gibt es eine bessere Möglichkeit zum hochladen dieses Ergebnis in einer Datenbank, anstatt ein Riesen dataframe zuerst?)

def lines_per_n(f, n):
    for line in f:
        yield ''.join(chain([line], itertools.islice(f, n - 1)))

def flatten(jfile):
    for k, v in jfile.items():
        if isinstance(v, list):
            jfile[k] = ','.join(v)
        elif isinstance(v, dict):
            for kk, vv in v.items():
                jfile['%s' % (kk)] = vv
            del jfile[k]
            return jfile

with open('deadzips.json') as f:
    for chunk in lines_per_n(f, 7):
        try:
            jfile = json.loads(chunk)
            pd.DataFrame(flatten(jfile).items())
        except ValueError, e:
            pass
        else:
            pass

InformationsquelleAutor der Frage horatio1701d | 2013-12-05

Schreibe einen Kommentar