Seite 1 von 1
Code kürzer/schöner machen
Verfasst: Mittwoch 14. Oktober 2020, 18:52
von MaximalMax
Ich habe hier 2 Datein, einmal das Python-Script und den JSON-File:
Code: Alles auswählen
import json
with open('data.json') as file:
data = json.load(file)['Steckbrief']
print(f"Name: {data['name']} \nAlter: {data['alter']}")
Liebe Grüße

Re: Code kürzer/schöner machen
Verfasst: Mittwoch 14. Oktober 2020, 19:44
von __deets__
Und was soll daran schöner werden?
Re: Code kürzer/schöner machen
Verfasst: Mittwoch 14. Oktober 2020, 20:46
von darktrym
Indem man file nicht überschreibt?
Re: Code kürzer/schöner machen
Verfasst: Mittwoch 14. Oktober 2020, 20:56
von __blackjack__
@darktrym: Pssst, Python 2 ist tot, es gibt kein `file` mehr.
@MaximalMax: Vor schön kommt immer erst einmal korrekt. Die JSON-Datei muss man entweder mit UTF-8 als Kodierung öffnen oder als Binärdatei.
Ansonsten würde ich das länger machen, damit es schöner und wird, nicht kürzer: Alles was zu einem Programm fehlt ergänzen.
Code: Alles auswählen
#!/usr/bin/env python3
import json
def main():
with open("data.json", "rb") as file:
data = json.load(file)["Steckbrief"]
print(f"Name: {data['name']}\nAlter: {data['alter']}")
if __name__ == "__main__":
main()
Re: Code kürzer/schöner machen
Verfasst: Donnerstag 15. Oktober 2020, 04:12
von snafu
Wobei hier die Variante mit format() IMHO auch nicht gerade unelegant ist:
Code: Alles auswählen
>>> data = {"name": "Bob", "alter": 42}
>>> print("Name: {name}\nAlter: {alter}".format(**data))
Name: Bob
Alter: 42
Oder wenn man die "Sternchen-Syntax" nicht nutzen möchte, geht es auch so:
Code: Alles auswählen
print("Name: {name}\nAlter: {alter}".format_map(data))
Und wenn viele Angaben gebraucht werden, kann man natürlich eine Schleife laufen lassen:
Code: Alles auswählen
print("\n".join(f"{key.capitalize()}: {value}" for key, value in data.items()))
Re: Code kürzer/schöner machen
Verfasst: Donnerstag 15. Oktober 2020, 17:16
von DeaD_EyE
Ich wünschte, es gäbe in Python einen einfachen Weg auf Werte in den Dicts mit dem Punkt zuzugreifen zu können.
Das Problem ist, dass nicht jeder String ein gültiger Name ist.
Hier mal ein Beispiel mit AttrDict:
Code: Alles auswählen
import json
from attrdict import AttrDict
# pip3 install attrdict
def get_steckbrief():
with open('data.json') as file:
return AttrDict(json.load(file)).Steckbrief
if __name__ == "__main__":
data = get_steckbrief()
print(f"Name: {data.name} \nAlter: {data.alter}")
Bitte nicht im Dreieck springen und freuen. AttrDict ist leider nicht die Wollmilchsau wie ich mir erhofft habe.
Der Zugriff ist in Ordnung. Zuweisungen von nicht existierenden Keys führen ins Nirwana und
ungültige Namen werden nicht in Attribute umgewandelt und aus Listen werden Tupel.
Re: Code kürzer/schöner machen
Verfasst: Donnerstag 15. Oktober 2020, 17:31
von narpfel
@DeaD_EyE: Kennst du
`addict`? Das macht einige von den Punkten, die du aufgezählt hast, so wie du das möchtest.
Re: Code kürzer/schöner machen
Verfasst: Montag 19. Oktober 2020, 11:49
von DeaD_EyE
narpfel hat geschrieben: Donnerstag 15. Oktober 2020, 17:31
@DeaD_EyE: Kennst du
`addict`? Das macht einige von den Punkten, die du aufgezählt hast, so wie du das möchtest.
Ja, sieht sehr vielversprechend aus. Damit werde ich meinen Werkzeugkasten erweitern. Danke für den Tipp
