recover a partly destroyed pickled structure
Mike C. Fletcher
mcfletch at rogers.com
Sat Sep 25 13:28:46 EDT 2004
Each line you quote as "interesting" is an item in a list, denoted by
the line starting with 'a', after that is the type notation ('F', for
float), so if that's all the data you need, you can just do:
values = []
for line in lines:
line = line.strip()
assert line.startswith( 'aF' ), """Line %r doesn't start with
aF"""%(line,)
value = float(line[2:])
values.append( value )
doSomethingWithValues( values )
You can see the formats quite simply by using pickle at the command line:
In [3]: pickle.dumps( [ 2.0, 3.0] )
Out[3]: '(lp0\nF2.0\naF3.0\na.'
HTH,
Mike
Maurizio Berlusconi wrote:
>Hi all
>
>I have (my mistake) overwritten the beginning of a file where a long
>dictionary was pickled with another (pickled and much smaller) dictionary.
>Since only 10% or so of the original and important data was overwritten, I
>would be happy if I could somehow recover at least the part that I can
>still see.
>
>
...
>ss. #after that line starts the data I need
>aF10.0
>aF10.3125
>aF8.125
>aF4.84375
>aF4.21875
>aF5.9375
>....# all data is here until the end
>g4
>sg215
>S'12:26'
>p3376
>ss.
># end of old important data
>
>Can anybody give an indication on how to do that? I tried to understand
>how pickle puts these numbers on the different fields and remove the
>unimportant beginning of the file to replace it with something that would
>allow to unpickle the data, but did not really succeed. Read the
>source (and understand it) is far beyond my python skills...
>
>Any hint or pointer would be appreciated.
>
>Regards,
>
>Maurizio
>
>
--
________________________________________________
Mike C. Fletcher
Designer, VR Plumber, Coder
http://www.vrplumber.com
http://blog.vrplumber.com
More information about the Python-list
mailing list