[Python-de] IFF Format: Dict?

Thomas Güttler guettliml at thomas-guettler.de
Fr Jan 4 08:31:06 EST 2019


Noch mal kurz langsam.
Dieser Thread geht um ein passendes Datenformat. Sicherlich
kann man da nun ganz viel programmieren, aber das will ich ganz
bewusst nicht tun. Wenn ich für die Lösung programmieren muss,
dann muss es wohl auch der Empfänger der Daten.
Das würde ich gerne vermeiden.

Gruß,
   Thomas

Am 14.12.18 um 22:10 schrieb Stefan Ram:
> =?UTF-8?Q?Thomas_G=c3=bcttler?= <guettliml at thomas-guettler.de> writes:
>> Wie kann man ein Python Dictionary in IFF speichern/laden?
> 
>    Ich habe mal angefangen, als Beispiel eine Methode
>    »write_CHRS« zu schreiben, die einen Python-String
>    als CHRS-Chunk in eine Datei schreibt. Danach lese
>    ich diesen wieder mit dem Modul "chunk" ein.
> 
>    Ich weiß aber nicht, ob ich jemals dazu komme, jetzt
>    noch darauf aufbauend das für ein Dictionary zu schreiben.
> 
>    main.py
> 
> class chunk():
>        def __init__( my, type=None, size=None ):
>            my.type = type
>            my.size = size
> 
> class chunk_CHRS( chunk ):
> 
>        class size_too_large( Exception ):
>              pass
> 
>        class unprepared_write_attempt( Exception ):
>              pass
> 
>        class no_text_given( Exception ):
>              pass
> 
>        def __init__( my, text=None ):
>            chunk.__init__( my, b'CHRS', None )
>            my.set_text( text )
> 
>        def set_text( my, text=None ):
>            my.text = text
>            my.data = None
>            my.prepared = False
> 
>        def prepare_for_writing( my ):
>            if my.text == None: raise no_text_given()
>            my.data = my.text.encode( 'utf-8' )
>            l = len( my.data )
>            if l > 2**32-1: raise size_too_large()
>            my.size = l
>            my.prepared = True
> 
>        def write_to_file( my, file ):
>            if not my.prepared: raise unprepared_write_attempt()
>            if my.size > 2**32-1: raise size_too_large()
>            file.write( my.type )
>            file.write( my.size.to_bytes( 4, byteorder='big', signed=False ))
>            file.write( my.data )
> 
> def write_CHRS( file, text ):
>      chunk = chunk_CHRS( text )
>      chunk.prepare_for_writing()
>      chunk.write_to_file( file )
> 
> with open( 'test20181214215507.txt', 'wb' ) as file:
>       write_CHRS( file, 'example' )
> 
> import chunk
> 
> with open( 'test20181214215507.txt', 'rb' ) as file:
>       c = chunk.Chunk( file )
>       print( c.getname() )
>       print( c.getsize() )
>       print( c.read( c.getsize() ))
>       c.close()
> 
>    transcript
> 
> b'CHRS'
> 7
> b'example'
> 
> _______________________________________________
> python-de maillist  -  python-de at python.org
> https://mail.python.org/mailman/listinfo/python-de
> 

-- 
Thomas Guettler http://www.thomas-guettler.de/
I am looking for feedback: https://github.com/guettli/programming-guidelines


Mehr Informationen über die Mailingliste python-de