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

lina lina.lastname at gmail.com
Wed Oct 12 10:27:28 CEST 2011


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

> On 2011-10-12 05:31, lina wrote:
>
>> I tried to write one (not working one) as below, so many problems here.
>>
>
> Just some quick remarks:


Thanks,

Now the newly-improved one as following: but still the "sort" parts did not
work.

#!/usr/bin/python3

import os.path

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

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


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 sortoneblock(cID):
    text=fetchonefiledata(INFILENAME)
    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():
            valuefromdict[cID]=mapping[blocks[2]]
            print(valuefromdict)



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()

   The result is:

 $ 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.

Thanks for further suggestions.

The relevant files I put it here:

https://docs.google.com/leaf?id=0B93SVRfpVVg3NzkyOGU2ZTUtZTFjNC00ZjE4LThhNmQtOWY1YWFkOWI0NWEw&hl=en_GB
https://docs.google.com/leaf?id=0B93SVRfpVVg3YTEwZjhiOTItN2I2Yi00NTEyLTljODAtYTc2ODI4Njk1YzZl&hl=en_GB
https://docs.google.com/leaf?id=0B93SVRfpVVg3M2Y1MWZiMmEtOTE2Mi00M2VjLTljNjAtYWNlMjhiNzEyODY1&hl=en_GB



>
>  #!/usr/bin/python3
>>
>> import os.path
>>
>> LINESTOSKIP=0
>> CHAINID="CDEFGHI"
>> INFILENAME="pdbone.pdb"
>> DICTIONARYFILE="itpone.itp"
>> mapping={}
>> valuefromdict={}
>>
>> def sortfile():
>>     for chainid in CHAINID:
>>         sortoneblock(chainid)
>>
>>
>> def generatedictionary(**dictfilename):
>>
>
> You define the function with the parameter "dictfilename" but you'll never
> use it.
>
>
>      text=fetchonefiledata(**DICTIONARYFILE)
>>     for line in text:
>>         parts=line.strip().split()
>>     if len(parts)==8:
>>         mapping[parts[4]]=parts[0]
>>         print(mapping)
>>
>
> The if-branch is probably wrongly indented (should be inside the for-loop).
>
>
>  def sortoneblock(cID)
>>     text=fetchonefiledata(**INFILENAME)
>>     for line in text:
>>         blocks=line.strip().split()
>>         if len(blocks)== 11 and  blocks[3] == "CUR" and blocks[4] ==
>> "cID":
>>
>
>
> "cID" is a string-variable but you compare block 4 to the literal string
> "cID". In "pdbone.pdb" you will never find "cID" so this function will do
> nothing. You probably mean "blocks[4] == cID".
>
>
>              valuefromdict[blocks[2]]=**mapping[block[2]]
>>
>
> You never fill up "mapping" because you never call your
> "generatedictionary"-function. Therefore "mapping" is still an empty
> dictionary and this line will raise an exception.
>
>              return
>>
>
> Firstly, the indentation is wrong because you would leave "sortoneblock"
> after the first processed line. Secondly, as you return nothing, you don't
> need this line because you will leave the function anyway.
>
>
>
>>
>> def fetchonefiledata(infilename):
>>     text=open("infilename").**readlines()
>>
>
> Again, "infilename" is a variable, so no need for the quotes.
>
>
>      if os.path.splitext(infilename)[**1]=".itp"
>>         return text
>>     if os.path.splitext(infilename)[**1]=".pdb"
>>         return text[LINESTOSKIP:]
>>
>>
>> if __name__=="__main__":
>>     sortfiles()
>>
>
> There is no "sortfiles()" in your script. The function you probably mean is
> called "sortfile()"
>
> 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/facefb24/attachment.html>


More information about the Tutor mailing list