[Python-de] XML Objects - Persistenz - wie?

Christopher Arndt chris at chrisarndt.de
So Dez 29 22:59:06 CET 2013


Am 29.12.2013 12:32, schrieb Arnold Krille:
>> Und warum nicht YAML?
>
> Oder json? Mit dem python-json müsste das direkt gehen...

JSON hat den Vorteil, direkt in der Standardlib zu sein, aber um 
komplexere Datentypen (außer ints, floats, lists und dicts) in JSON 
abzubilden, muss man ziemliche Klimmzüge machen. Das geht mit YAML ([1] 
http://pyyaml.org/wiki/PyYAML) alles einfacher und ist m.E. auch viel 
einfacher für Menschen zu lesen und zu editieren (Man beachte die 
fehlenden Quotes und die resultierenden Datentypen):

     >>> import yaml
     >>> from collections import namedtuple
     >>> Movie = namedtuple('Movie',
             ['title', 'original', 'director', 'url', 'year'])
     >>> movies = yaml.load("""\
     ... -
     ...   title: Der Blade Runner
     ...   original: Blade Runner
     ...   director: Ridley Scott
     ...   year: 1982
     ...   url: http://www.imdb.com/title/tt0083658
     ... - title: Der Wüstenplanet
     ...   original: Dune
     ...   director: David Lynch
     ...   year: 1984
     ...   url: http://www.imdb.com/title/tt0087182
     ... """)
     >>> print movies
     [{'director': 'Ridley Scott', 'url':
     'http://www.imdb.com/title/tt0083658', 'title': 'Der Blade Runner',
     'original': 'Blade Runner', 'year': 1982}, {'director':
     'David Lynch', 'url': 'http://www.imdb.com/title/tt0087182',
     'title': u'Der W\xfcstenplanet', 'original': 'Dune', 'year': 1984}]

     >>> movies = [Movie(**d) for d in movies]
     >>> print movies[0]
     Movie(title='Der Blade Runner', original='Blade Runner',
     director='Ridley Scott', url='http://www.imdb.com/title/tt0083658',
     year=1982)

Die Umwandlung der YAML-Datensätze in 'Movie'-Instanzen lässt sich auch 
direkt von PyYAML erledigen:

http://pyyaml.org/wiki/PyYAMLDocumentation#Constructorsrepresentersresolvers


Chris


Mehr Informationen über die Mailingliste python-de