2017-10-29 2 views
0

Ich versuche, einen Schreibvorgang von meinem Skript zu machen, um es zu einer JSON-Datei.Python - Json schreiben, will nicht ausdrucken, wie ich es wünsche

Allerdings, wenn ich mit meinem Skript schreiben, es gibt mir eine Ausgabe von

{ 
    "profile_1": { 
     "email": "HelloWorld", 
     "pswrd": "WorldHello123" 
    } 
} { 
    "profile_2": { 
     "email": "HelloWorld", 
     "pswrd": "WorldHello123" 
    } 
} { 
    "profile_3": { 
     "email": "HelloWorld", 
     "pswrd": "WorldHello123" 
    } 
} 

Welche denn ich wirklich wollte:

"profile_0": { 
      "email": "HelloWorld", 
      "pswrd": "WorldHello123" 

     }, 
     "profile_1": { 
      "email": "HelloWorld", 
      "pswrd": "WorldHello123"" 
     }, 
     "profile_2": { 
      "email": "HelloWorld", 
      "pswrd": "WorldHello123" 
     }, 
     "profile_3": { 
      "email": "HelloWorld", 
      "pswrd": "WorldHello123" 
     }, 

und wie wir vergleichen es ist {} zu viele und auch fehlt, was ich nicht ganz verstehen kann, warum es nicht funktionieren würde. Dies ist, wie mein Skript funktioniert:

import json 

    with open("test.txt") as accounts: 
     for splitlines in accounts: 
      temp = accounts.read().splitlines() 
      username, password = zip(*(s.split(":") for s in temp)) 
      linelength = len(username) 

      with open("profiles.json", "a") as profile: 
       lineInt = 0 
       while (lineInt < linelength): 
        lineInt += 1 
        jsonData = { 
          "profile_" + str(lineInt): { 
          "email": username[lineInt], 
          "pswrd": password[lineInt] 
          } 
        } 
        json.dump(jsonData, profile) 

Ich habe zu lange gesessen nicht das Problem sehen: '(

+1

Sie nur ** eine ** 'json.dump' haben sollte, bauen eine Liste von dictionari es, dann schreibe * das * in die Datei. – jonrsharpe

Antwort

0

Sie ausgeben JSON-Objekte eins nach dem anderen Wenn Sie die Ausgabe eines wollen. JSON-Array, sollten Sie die Objekte in einer Liste setzen und drucken, die, zum Beispiel:

lineInt = 0 
items = [] 
while (lineInt < linelength): 
    jsonData = { 
     "profile_" + str(lineInt): { 
      "email": username[lineInt], 
      "pswrd": password[lineInt] 
     } 
    } 
    lineInt += 1 
    items.append(jsonData) 
json.dump(items, profile) 
+0

Oh ja, ich kann jetzt das Problem sehen. Aber ich sehe nicht, warum dein Exemplar nicht funktionieren würde, weil es zumindest für mich gut aussieht? Es sagt, dass meine E-Mail ist "Tupel-Index außerhalb des Bereichs" – Andres123

+0

@ Andres123, das war wegen eines anderen Bug in Ihrem Code, inkrementieren 'lineInt' zu früh. Ich habe es jetzt behoben, siehe die aktualisierte Antwort – janos

+0

Ja genau! Habe es gerade auch herausgefunden! Da gehen wir! – Andres123