[Tutor] map one file and print it out following the sequence

lina lina.lastname at gmail.com
Wed Oct 12 15:57:36 CEST 2011


On Wed, Oct 12, 2011 at 8:50 PM, Andreas Perstinger <
andreas.perstinger at gmx.net> wrote:

> On 2011-10-12 10:27, lina wrote:
>
>>  $ python3 map-to-itp.py
>> {'O4': '2', 'C19': '3', 'C21': '1'}
>> {'C': '3'}
>> {'C': '2'}
>> {'C': '1'}
>>
>> for print(mapping) part, {'O4': '2', 'C19': '3', 'C21': '1'} the value
>> doesn't keep the 1, 2, 3 order any more.
>>
>
> That's fine, because "mapping" is a dictionary which has no order. From the
> tutorial (http://docs.python.org/py3k/**tutorial/datastructures.html#**
> dictionaries<http://docs.python.org/py3k/tutorial/datastructures.html#dictionaries>
> ):
> "It is best to think of a dictionary as an unordered set of key: value
> pairs, with the requirement that the keys are unique (within one
> dictionary)."
>
> What you want (as far as I understand it) is sorting the lines in
> "pdbone.pdb" based on the positions in file "itpone.itp". The connection
> between both files is the column with the values "O4", "C19", "C21", ... (=
> your keys). You've already succesfully built a dictionary in which you saved
> the position for every key.
>
> For the sorting you could now build a list of tuples of all lines in
> "pdbone.pdb" you want to sort where the first element in the tuple is the
> position and the second the line itself. Then you can easily sort this
> temporary list and write the new ordered lines back to the file:
>
> def sortoneblock(cID):
>    text = fetchonefiledata(INFILENAME)
>    temp = []    # create an empty temporary list
>
>    for line in text:
>        blocks = line.strip().split()
>        if len(blocks) == 11 and blocks[3] == "CUR" and blocks[4] == cID and
> blocks[2] in mapping.keys():
>
>            temp.append((mapping[blocks[2]**], line))  # add a tuple to the
> list which has the following format: (position from the dictionary, complete
> line)
>
>    # the following line just shows you, what we have done so far. You can
> delete it without consequences.
>
>    for line in temp: print(line)
>
>    temp.sort() # this sorts the list based on the position
>
>    # the following line prints the sorted list (just the original line
> without the position elements). If you want to write the result back to the
> file you have to exchange "print()"
>
I do have problems to write each blocks (differentiated by chainID)  back
one by one, but this will leave it at the end. at present I still have
following problems
Q1: why the D E F G H I stopped being processed.

>
>    for line in temp: print(line[1])

Thanks.

$ python3 map-to-itp.py
{'O4': '2', 'C19': '3', 'C21': '1'}
C
ATOM    832  C21 CUR C  85      32.823  27.366   0.801  1.00
0.00
ATOM    831  O4  CUR C  85      31.865  28.248   0.183  1.00
0.00
ATOM    827  C19 CUR C  85      31.891  29.624   0.280  1.00
0.00

D
E
F
G
H
I




#!/usr/bin/python3

import os.path

LINESTOSKIP=0
CHAINID="CDEFGHI"
INFILENAME="pdbone.pdb"
DICTIONARYFILE="itpone.itp"
mapping={}
valuefromdict={}

def sortfile():
    for chainid in CHAINID:
        print(chainid)
        sortoneblock(chainid)



def sortoneblock(cID):
    text=fetchonefiledata(INFILENAME) ## Q2: How to avoid read this file
every time. actually it only need read once.
    temp = []
    for line in text:
        blocks=line.strip().split()
        if len(blocks)== 11 and  blocks[3] == "CUR" and blocks[4] == cID and
blocks[2] in mapping.keys():
            temp.append((mapping[blocks[2]],line))
    temp.sort()
    for line in temp:
        print(line[1].strip())


def generatedictionary(dictfilename):
    text=fetchonefiledata(DICTIONARYFILE)
    for line in text:
        parts=line.strip().split()
        if len(parts)==8:
            mapping[parts[4]]=parts[0]
    print(mapping)



def fetchonefiledata(infilename):
    text=open(infilename).readlines()
    if os.path.splitext(infilename)[1]==".itp":
        return text
    if os.path.splitext(infilename)[1]==".pdb":
        return text[LINESTOSKIP:]


if __name__=="__main__":
    generatedictionary(DICTIONARYFILE)
    sortfile()

 Thanks.



>
>
> Bye, Andreas
> ______________________________**_________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/**mailman/listinfo/tutor<http://mail.python.org/mailman/listinfo/tutor>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20111012/6883bbf5/attachment-0001.html>


More information about the Tutor mailing list