Hello Biostar community,
I have a small issue with a program that reads PDB files, extractes atomic coordinates, and then writes them to a list. I have structured my program with three functions, one for iteratively parsing ~500 PDB-like files from a directory and storing atomic coordinates in a list, one for iteratively appending the list created for each file to the existing one, and one for reading the list. The program looks as follows:
#!/usr/local/bin
import os,string
from sys import version
z_coords1 = [] # Global list variable that needs to be known to 3 function
def serialize_pipeline_model(f):
""" This function extracts the necessary atomic coords""""
....
.... BUNCH OF CODE
.... code to create z_coords1
return z_coords1
import pickle
def write_to_binary(z_coords1):
""" iteratively write successively generated z_coords1 to a binary file """
print '\nPickling z-coordinates list'
f = open("z_coords1.dat", "ab")
pickle.dump(z_coords1, f)
f.close()
return
def read_from_binary(z_coords1)
.... SAME AS write_to_binary except that I UNPICKLE the list
### LOOP OVER DIRECTORY
for f in os.listdir('/Users/spyros/Desktop/3NY8MODELSHUMAN/HomologyModels/'):
serialize_pipeline_model(f)
write_to_binary(z_coords1)
read_binary(z_coords1)
print '\n Z-VALUES FOR ALL CHARGED RESIDUES'
print z_coords1
When I run the program the unpickling returns an empty list. Strangely, when I check the binary file, z_coords1.dat
it has been created in my directory, but it isn't being read correctly. Does anyone have any idea as to what is happening?
Many thanks for your time.
Best,
Spyros
In the serializepipelinemodel function, are you modifying the zcoords1 list? Or is it returning new data. If it is returning new data, it doesn't look like you are placing it anywhere. If you are modifying the zcoords1 list and you are not clearing the list after every file, aren't you outputting incrementally larger files every iteration?
@Dk: I initialize the list at the top because it need to be global and build it at the end of the serializepiplinemodel() function. I don't modify it, just specify how its built (put together previously created lists - the code would be too verbose to post it!). Practically, I need to build 500 lists and merge them into one super-list (hence I write each list to a binary file after its created). Do I need to clear the list after each iteration for this? Sorry perhaps I didn't understand what you wrote, many thanks for your reply! Spyros