python - Deserialize json/yaml from binary stream which contains other data -


suppose have binary stream stream , generate follows.

stream.write('lol'.encode()) yaml.dump(some_obj, stream) stream.write('awesome'.encode()) 

then have write custom parser of sort stream or can recover some_obj follows.

stream.read(3) recovered = yaml.load(stream) stream.read(7) 

if doesn't work yaml serialization, work json serialization?

you cannot want because yaml parser consumes complete stream if dummp explicit end (yaml.dump(some_obj, stream, explicit_end=true) (which insert ...\n before awesome) , doesn't work when writing ---\nawesome (the document separator). yaml parser consumes word awesome¹ both when use yaml.load() when use yaml.load_all().

the part front works fine, can consider doing like:

import ruamel.yaml yaml  file_name = 'test.comb'  some_obj = dict(a = [1, 2], b = {3: 42})  open(file_name, 'w') stream:     stream.write('lol'.encode())     yaml.dump(some_obj, stream, explicit_end=true)     stream.write('awesome'.encode())   open(file_name) stream:     assert stream.read(3) == 'lol'     stream_data = ''     while true:         stream_data += stream.read(1)         if stream_data[-4:] == '...\n':             break     recovered = yaml.load(stream_data)     assert stream.read(7) == 'awesome'  print(recovered) 

which gives (in python2):

{'a': [1, 2], 'b': {3: 42}} 

and file contents are:

lola: [1, 2] b: {3: 42} ... awesome 

i use similar technique, reading lines for line in stream, cannot combined normal read() operations, files have yaml header metadata, followed normal text (non-indented emacs can work on it).


¹ i consider reading past end-of-stream marker (...) bug in python yaml parser i'll try , fix in next release.


Popular posts from this blog

php - How should I create my API for mobile applications (Needs Authentication) -

5 Reasons to Blog Anonymously (and 5 Reasons Not To)

Google AdWords and AdSense - A Dynamic Small Business Marketing Duo