json.dump funktioniert nicht

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Sarapheus
User
Beiträge: 7
Registriert: Montag 20. August 2018, 22:13

mein Problem ist ,

Code: Alles auswählen

import json

highscore = []
highscore.append(("ernie",12))
highscore.append(("alex", 100))
highscore.append(("Paul",122))

datei = open ("json.txt", "w")
ausgabe = json.dump(highscore, datei)
datei.close()

datei = open("speichern.txt","r")
einlesen = json.load(datei)
datei.close()

for eintrag in einlesen:
    print ("name:", eintrag[0], "score = ", eintrag[1])
wenn ich dieses Script ausführe bekomme ich eine Fehlermeldung und ich verstehe nicht wieso. Habe Python frisch auf diesem Computer installiert.


Traceback:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Users\Sarapheus\Desktop\Python\json.py", line 1, in <module>
    import json
  File "C:\Users\Sarapheus\Desktop\Python\json.py", line 9, in <module>
    ausgabe = json.dump(highscore, datei)
AttributeError: module 'json' has no attribute 'dump'
>>> 
Danke schon mal für eure antworten .

* Habe eben auf meinem Laptop geschaut, dort funktioniert es.......
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Du hast dein eigenes Modul json.py genannt. Beim Import wird dies genommen anstelle des json-Moduls aus Pythons Standardbibliothek, weil lokal vorliegende Module für Python Vorrang haben. Die Lösung: Benenne einfach dein Modul um.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und vergiss nicht, ein rumliegendens json.pyc zu loeschen, das entstanden sein duerfte.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Sarapheus: Noch ein paar Anmerkungen zum Quelltext:

Statt da dreimal `append()` mit festen Werten aufzurufen, hättest Du auch gleich eine Liste mit den drei Einträgen in den Quelltext schreiben können.

Anstelle von `close()`, was eigentlich in einem `finally()`-Block stehen müsste um auf Nummer sicher zu gehen, verwendet man die ``with``-Anweisung zusammen mit `open()`.

Warum bindest Du die Rückgabe von `json.dump()` an den Namen `ausgabe`? Was denkst Du denn was diese Funktion als Ergebnis liefert?

`einlesen` ist ein schlechter Name für einen Wert der keine Funktion oder Methode ist. Denn die werden in der Regel nach den Tätigkeiten benannt die sie durchführen. Ein guter Name wäre `highscore`, denn genau das bedeutet der Wert der da eingelesen wird.

In der folgenden ``for``-Schleife kann man die beiden Bestandteile eines Eintrags auch gleich im Schleifenkopf an Namen binden. Dann spart man sich im Schleifenkörper die Indexzugriffe mit magischen, nichtssagenden Zahlen.

Code: Alles auswählen

#!/usr/bin/env python3
import json


def main():
    highscore = [('ernie', 12), ('alex', 100), ('Paul', 122)]

    with open('json.txt', 'w') as datei:
        json.dump(highscore, datei)

    with open('speichern.txt', 'r') as datei:
        highscore = json.load(datei)

    for name, score in highscore:
        print('name:', name, 'score =', score)


if __name__ == '__main__':
    main()
Nun stellt sich noch die Frage ob das Sinn macht in eine Datei zu schreiben, und aus einer anderen zu lesen. Und es wäre besser wenn die Dateien die Endung .json hätten.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Sarapheus
User
Beiträge: 7
Registriert: Montag 20. August 2018, 22:13

Wow, das ging jetzt echt schnell danke für die Antworten. Jetzt geht das Script endlich :D

Zum Quelltext den habe ich eben aus dem Buch abgeschrieben mit dem ich Python lerne, hätte eigentlich gedacht das in Fachliteratur schon "ordentlicher" Code steht <_<
Antworten