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']}")

Code: Alles auswählen

{"Steckbrief":
  {
    "name": "Max",
    "alter": 13
  }
}
Liebe Grüße :D

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 :-)