reading files into dicts
rbt
rbt at athop1.ath.vt.edu
Thu Dec 29 20:51:47 EST 2005
Gary Herron wrote:
> rbt wrote:
>
>> What's a good way to write a dictionary out to a file so that it can
>> be easily read back into a dict later? I've used realines() to read
>> text files into lists... how can I do the same thing with dicts?
>> Here's some sample output that I'd like to write to file and then read
>> back into a dict:
>>
>> {'.\\sync_pics.py': 1135900993, '.\\file_history.txt': 1135900994,
>> '.\\New Text Document.txt': 1135900552}
>>
>>
>
>
> A better way, than rolling your own marshaling (as this is called),
> would be to use the cPickle module. It can write almost any Python
> object to a file, and then read it back in later. It's more efficient,
> and way more general than any code you're likely to write yourself.
>
> The contents of the file are quite opaque to anything except the cPickle
> and pickle modules. If you *do* want to roll you own input and output to
> the file, the standard lib functions "repr" and "eval" can be used. Repr
> is meant to write out objects so they can be read back in and recovered
> with eval. If the contents of your dictionary are well behaved enough
> (simple Python objects are, and classes you create may be made so), then
> you may be able to get away with as little as this:
>
> f = file('file.name', 'wb')
> f.write(repr(myDictionary))
> f.close()
>
> and
>
> f = file('file.name', 'rb')
> myDictionary = eval(f.read())
> f.close()
>
> Simple as that is, I'd still recommend the cPickle module.
>
> As always, this security warning applys: Evaluating arbitrary text
> allows anyone, who can change that text, to take over complete control
> of your program. So be carefully.
>
> Gary Herron
>
>
Thanks to everyone for the tips on eval and repr. I went with the
cPickle suggestion... this is awesome! It was the easiest and quickest
solution performance-wise. Just makes me think, "Wow... how the heck
does pickle do that?!"
Thanks again,
rbt
More information about the Python-list
mailing list