[Tutor] pickle.dump yielding awkward output
Dave Angel
davea at davea.name
Mon Feb 4 00:48:35 CET 2013
(top-posting and offline response fixed)
On Sun, Feb 3, 2013 at 11:07 PM, Dave Angel <davea at davea.name> wrote:
>> On 02/03/2013 02:26 PM, Spyros Charonis wrote:
>>
>>> Hello Pythoners,
>>>
>>> I am experiencing a strange result with the pickle module when using it to
>>> write certain results to a separate file.
>>>
>>> In short, I have a program that reads a file, finds lines which satisfy
>>> some criteria, and extracts those lines, storing them in a list. I am
>>> trying to write this list to a separate file.
>>>
>>> The list of extracted lines looks like this:
>>>
>>> ATOM 1 N GLN A 1 29.872 13.384 54.754 1.00 60.40
>>> N
>>>
>>> ATOM 2 CA GLN A 1 29.809 11.972 54.274 1.00 58.51
>>> C
>>>
>>> ATOM 3 C GLN A 1 28.376 11.536 54.029 1.00 55.13
>>> C
>>>
>>> The output stored from the call to the pickle.dump method, however, looks
>>> like this:
>>>
>>> (lp0
>>> S'ATOM 1 N GLN A 1 29.872 13.384 54.754 1.00 60.40
>>> N \r\n'
>>> p1
>>> aS'ATOM 2 CA GLN A 1 29.809 11.972 54.274 1.00 58.51
>>> C \r\n'
>>> p2
>>> aS'ATOM 3 C GLN A 1 28.376 11.536 54.029 1.00 55.13
>>> C \r\n'
>>>
>>> The code I am using to write the output to an external file goes as
>>> follows:
>>>
>>> def export_antibody_chains():
>>> ''' EXPORT LIST OF EXTRACTED CHAINS TO FILE '''
>>> chains_file = open(query + '_Chains', 'wb')
>>> pickle.dump(ab_chains, chains_file) # ab_chains is global
>>> chains_file.close()
>>> return
>>>
>>> Does anyone know why the strings lp0, S', aS' are showing up?
>>>
>>>
>>>
>> Pickle stores the type of each variable, as well as the value, and stores
>> it in a way as to make it easy to "unpickle" it.
>>
>>
On 02/03/2013 06:17 PM, Spyros Charonis wrote:
> Thank you Dave,
>
> Is there any way to circumvent this so that I get the list rendered
> normally? Many thanks.
>
You'd better define "normally." Pickle's output is normal for pickle.
Perhaps you want the values to be human readable instead.
One possibility of many: If you know that all the values in the list
are strings, and you want to produce a text file, with one such string
per line, then try:
outfile = open( "filename.txt", 'wt")
for line in mylist:
outfile.write( line + "\n")
outfile.close()
There are ways to clean that up, but since you haven't specified your
python version, that'll do for a first attempt.
--
DaveA
More information about the Tutor
mailing list