2016-05-08 7 views
0

Ich bin sehr neu in Python-Programmierung, so habe ich das folgende Python-Skript erstellt, um in einem Ordner zu iterieren, die 3000 oder mehr JSON-Dateien enthalten, und ich weiß nicht, wie in diesen 3000 zu iterieren JSON-Dateien, die nicht manuell in das Skript eingefügt werden, und ich muss einen bestimmten Pfad angeben, wo sich auch die JSON-Dateien befinden, und ich weiß nicht, wie ich sie deklariere.Wie zu lösen bekommen Json Daten mit Python

import json 
all_results = {} 
json_file_list = ['1.json', '2.json'] 
for file in json_file_list: 
    with open(file) as json_file: 
    json_data = json.load(json_file) 
    for key, value in json_data.iteritems(): 
     if 'result' in value: 
      all_results[key] = value['result'] 
return all_results 

nach meinem Python-Skript ausgeführt habe ich folgende Fehlermeldung:

File "getResult.py", line 20 
    return all_results 
SyntaxError: 'return' outside function 

und das ist, wie wie meine jsons Dateien sucht

{ "igt @ gem_reloc_overflow @ Single-Überlauf": { "Typ": "TestResult", "Befehl": "/ home/gfx/Intel-Grafik/Intel-gpu-tools/Tests/gem_reloc_overflow - Run-Subtest Single-Überlauf", "dmesg": "", "umgebung": "PIGLIT_PLATFORM = \" mixed_glx_egl \ "PIGLIT_SOURCE_DIR = \"/home/gfx/intel-grafiken/intel-gpu-tools/piglit \ "", "err": "(gem_reloc_overflow: 19562) Kritisch: Test Assertionsfehler Funktion reloc_tests, Datei gem_reloc_overflow.c: 260: \ n (gem_reloc_overflow: 19562) Kritisch: fehlgeschlagen Assertion: gem_execbuf (fd, & execbuf) == -14 \ n (gem_reloc_overflow: 19562) KRITISCH: Fehler: -22! = -14 \ nUnterster Überlauf fehlgeschlagen. \ N **** DEBUG **** \ n (gem_reloc_overflow: 19562) DEBUG: relocation_count = 4294967295 \ n (gem_reloc_overflow: 19562) KRITISCH : Test assertion failure-Funktion recover_tests, Datei gem_reloc_overflow.c: 260: \ n (gem_reloc_overflow: 19562) Kritisch: fehlgeschlagene Zusicherung: __gem_execbuf (fd, & execbuf) == -14 \ n (gem_reloc_overflow: 19562) Kritisch: Fehler: -22 ! = -14 \ n **** ENDE **** \ n ", "exception": null, "out": "IGT-Version: 1.14-g1e9a3ac (x86_64) (Linux: 4.6.0-rc4-drm-intel-nightly-ww17-commit-1e81bac + x86_64) \ nStack-Trace: \ n # 0 [__igt_fail_assert + 0x101] \ n # 1 [rek_tests + 0x6d6] \ n # 2 [+ 0x6d6] \ nUnterster Überlauf: FAIL (8.469s) \ n ", " pid ": 19562, " Ergebnis ": "nicht bestanden", "Return": 99, "Subtests": { " __type ": "Subtests" }, "Zeit": { " Typ ": "TimeAttribute", " Ende ": 1462072402.5360818, " Start ": 1462072393.7328644 }, " traceback ": null } }

jede Hilfe ist willkommen, dank

Antwort

0

Vielleicht möchten Sie print all_results statt return all_results. Oder Sie könnten sie einzeln drucken, sobald sie gefunden wurden.

0

Um über die Dateien in einem Verzeichnis zu iterieren, ohne die Dateinamen manuell eingeben zu müssen, können Sie os.walk() oder os.listdir() verwenden. Weitere Informationen finden Sie unter this question.

Der Syntaxfehler scheint ziemlich selbsterklärend zu sein. Sie haben eine return-Anweisung, die nicht in einer Funktionsdefinition enthalten ist; Das ist ungültig Python. Wenn Sie die Ergebnisse ausgeben möchten, verwenden Sie print.

+0

Dank, aber mit diesem Befehl: onlyfiles = [f für f in listdir (mypath), wenn isfile (join (mypath, f))], ich nur haben Die Namen der JSON-Dateien, und ich brauche den vollständigen Pfad mit den Namen, weil Python mir zeigt, dass es die Dateien nicht finden kann – shaveax

0

Speichern Sie den Pfad von JSON-Dateiverzeichnis auf eine Variable

mypath = "/home/json_file_directory" 

Verwenden os.listdir() alle JSON-Dateien aufzulisten.

Sobald Sie json Dateinamen haben, verwenden

os.path.join(mypath,filename) #to get the exact path of file.