Python: erstellen Sie eine Liste generator JSON serialisierbar

Wie kann ich mit concat eine Liste von JSON-Dateien in eine riesige JSON-array? Ich habe 5000 Dateien und 550 000 Einträge.

Meine Faust versuchen zu nutzen, um die jq, aber es sieht aus wie jq -s ist nicht optimiert für einen großen Eingang.

jq -s -r '[.[][]]' *.js 

Dieser Befehl funktioniert, aber es dauert viel zu lange, um abzuschließen, und ich möchte wirklich, diese zu lösen mit Python.

Hier ist mein Derzeitiger code:

def concatFiles(outName, inFileNames):
    def listGenerator():
        for inName in inFileNames:
            with open(inName, 'r') as f:
                for item in json.load(f):
                    yield item

    with open(outName, 'w') as f:
        json.dump(listGenerator(), f)

Ich bin immer:

TypeError: <generator object listGenerator at 0x7f94dc2eb3c0> is not JSON serializable

Jeder Versuch, laden Sie alle Dateien in den ram ausgelöst wird der OOM-killer von Linux. Haben Sie irgendwelche Ideen?

Wie sieht es genau inhaltlich in der Verknüpfung der Dokumente, das einfügen von Kommata zwischen?
Sie müssen entfernen Sie das äußere array die einzelnen Dateien. Entfernen Sie die Faust und letzten Zeichen jeder Datei sollte funktionieren, aber ich würde gerne Steuern (und entfernen) die json-Einzug.
wie groß sind die Dateien eigentlich? könnte es sein, dass die Durchführung der kompletten serialisierten Daten ist größer als Ihr Gedächtnis ?
Ja, das ist der Grund, warum Anrufliste(..) ist nicht zur Arbeit gehen.
Sie müssen auch Validierung der JSON-vor der Verarbeitung? Wenn nicht, gibt es keine Notwendigkeit, zu konvertieren string -> JSON -> Zeichenfolge. Setzen Sie einfach Kommas zwischen den einzelnen filestream-und surround mit [].

InformationsquelleAutor Sebastian Wagner | 2014-02-09

Schreibe einen Kommentar