new python user needs help!

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • drjekil
    New Member
    • Apr 2008
    • 5

    new python user needs help!

    I am working with a text filelooks like this:
    #NAME AA TOPO ACCESS DSSP STRIDE Z-COORD
    1lghB A i 79.8 H H -24.58
    1lghB V i 79.6 H H -22.06
    1lghB H i 71.9 H H -19.94
    i need to compare those lines which has a value between 10 to 22 and presents in the following way
    True/false A C D E F G H I K L M N P Q R S T V X Y W(here alfabets represents amino acids)
    1 1:1 2:0 3:0 and so on for rest of the amino acids.


    I have given 2 examples below to make it clear a bit:

    ex.1:
    #NAME AA TOPO ACCESS DSSP STRIDE Z-COORD
    1lghB A i 79.8 H H -24.58 #for that line amino acid is A and z-COORED value is more than 22,so output should be look like

    True/false A C D E F G H I K L M N P Q R S T V X Y W(here alfabets represents amino acids)
    -1 1:1 2:0 3:o 4:0 so on upto 20 bcz there r 20 amino acids.and A presents in the 1st position.every line represents one amino acid with value,so output will show in which position is it(here A is in 1st position thats why its value 1:1 and all the other position o like 2:0,3:0,4:0 and if its Z-COORED value between 10-22 then true false value 1,otherwise -1.

    another ex:

    1lghB H i 71.9 H H -19.94 # for that line amino acid is H and it has value between 10-22.so output should looks like:

    True/false A C D E F G H I K L M N P Q R S T V X Y W(here alfabets represents 20 amino acids)

    1 1:0 2:0 3:0 4:0 5:0 6:0 7:1 8:0,every position is zero up to 20 bcz H presents in the 7th position.so it will be 1.

    so for every line, output will in 21 coulum,1st coulum for true false value,others r for 20 amino acids.true false value will be either 1 or -1,and within other 20 coulum one value will be n:1,others will be n:0.n=0,1,2,3.. 20.
    its a bit tricky.
    I have done something so far about that problem,but its not the good way to
    do it

    need ur comments about that....


    from string import *;
    import sys

    myfile = open("/afs/pdc.kth.se/home/d/debnath/membrane/1a91A.txt")
    a = myfile.readline s()
    data = myfile.readline s()
    for line in myfile.readline s():
    fields = line.split('\t' )

    items=fields.st rip()
    list1.append(it ems[1])


    for i in Z-CORRED:
    if 10.0 <= z <= 22.0:
    matches.append([1,i])



    else:
    matches.append([-1,i])

    print "#T/F A C D E F G H I K L M N P Q R S T V W X Y
    Z"

    for a in range(0,len(mat ches),1):

    if matches[a][0]==1:

    if matches[a][1]=='A':
    print "1 1:1 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0 13:0
    14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    elif matches[a][1]=='C':
    print "1 1:0 2:1 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0 13:0
    14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    elif matches[a][1]=='D':

    print " 1 1:0 2:0 3:1 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    """ if matches[a][1]=='E' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:1 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='F' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:1 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='G' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:1 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='H' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:1 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='I' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:1 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='K' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:1 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='L' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:1 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='M' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:1 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='N' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:1
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='P' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:1 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='Q' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:1 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='R' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:1 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='S' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:1 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='T' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:1 18:0 19:0 20:0 21:0"
    if matches[a][1]=='V' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:1 19:0 20:0 21:0"
    if matches[a][1]=='X' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:1 20:0 21:0"
    if matches[a][1]=='Y' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:1 21:0"
    if matches[a][1]=='Z' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:1"


    """
    else: #here i have getting comments
    if matches[a][1]=='A':
    print "-1 1:1 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0 13:0
    14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    elif matches[a][1]=='C':
    print "-1 1:0 2:1 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    elif matches[a][1]=='D':

    print " 1 1:0 2:0 3:1 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    """ if matches[a][1]=='E' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:1 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='F' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:1 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='G' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:1 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='H' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:1 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='I' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:1 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='K' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:1 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='L' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:1 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='M' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:1 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='N' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:1
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='P' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:1 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='Q' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:1 15:0 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='R' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:1 16:0 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='S' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:1 17:0 18:0 19:0 20:0 21:0"
    if matches[a][1]=='T' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:1 18:0 19:0 20:0 21:0"
    if matches[a][1]=='V' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:1 19:0 20:0 21:0"
    if matches[a][1]=='X' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:1 20:0 21:0"
    if matches[a][1]=='Y' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:1 21:0"
    if matches[a][1]=='Z' and matches[a][0]==1:

    print " 1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0 12:0
    13:0 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:1"
    waiting for ur opinion.
    thanks
  • bvdet
    Recognized Expert Specialist
    • Oct 2006
    • 2851

    #2
    Please use code tags. The code is difficult to follow without them. You can accomplish your needs with much less code. Reading the file and splitting the data if fairly straightforward , and so is formatting the output if you use some of the tools Python has available. The following reads the data into two lists - header and acid data:
    [code=Python]acids = 'ACDEFGHIKLMNPQ RSTVXYW'
    num_range = [10,22]
    fn = r'H:\TEMP\temsy s\amino_acids_d ata.txt'
    f = open(fn)

    # save the header text list using a list comprehension
    headerList = [item.strip() for item in f.readline()[1:].split()]
    print headerList

    # save stripped lines in a list using a list comprehension
    lineList = [item.strip() for item in f]
    f.close()[/code]The next section formats the results for printing.[code=Python]
    # iterate on list of lines without the list comprehensions
    for item in lineList:
    itemList = item.split()
    acid = itemList[1]
    z_coord = float(itemList[-1])
    print 'True/False A C D E F G H I K L M N P Q R S T V X Y W'
    if num_range[0]<=abs(z_coord)< =num_range[1]:
    print 1,
    else:
    print -1,
    outputList = []
    for letter in acids:
    if acid == letter:
    outputList.appe nd('1:%d' % (acids.index(le tter)+1))
    else:
    outputList.appe nd('0:%d' % (acids.index(le tter)+1))
    print ' '.join(outputLi st)[/code]The following does the same thing, but uses list comprehensions:[code=Python]# iterate on list of lines
    for item in lineList:
    itemList = item.split()
    acid = itemList[1]
    z_coord = float(itemList[-1])
    print 'True/False A C D E F G H I K L M N P Q R S T V X Y W'
    print '%d' % ([-1, 1][(num_range[0]<=abs(z_coord)< =num_range[1]) or 0]),
    print ' '.join(['%d:%d' % ([0, 1][acid==letter or 0], acids.index(let ter)+1) for letter in acids])[/code]Sample output:
    [code=Python]
    >>> True/False A C D E F G H I K L M N P Q R S T V X Y W
    -1 1:1 0:2 0:3 0:4 0:5 0:6 0:7 0:8 0:9 0:10 0:11 0:12 0:13 0:14 0:15 0:16 0:17 0:18 0:19 0:20 0:21
    True/False A C D E F G H I K L M N P Q R S T V X Y W
    -1 0:1 0:2 0:3 0:4 0:5 0:6 0:7 0:8 0:9 0:10 0:11 0:12 0:13 0:14 0:15 0:16 0:17 1:18 0:19 0:20 0:21
    True/False A C D E F G H I K L M N P Q R S T V X Y W
    1 0:1 0:2 0:3 0:4 0:5 0:6 1:7 0:8 0:9 0:10 0:11 0:12 0:13 0:14 0:15 0:16 0:17 0:18 0:19 0:20 0:21[/code]It looks like there are 21 acids.

    Comment

    • drjekil
      New Member
      • Apr 2008
      • 5

      #3
      Thanks for ur help!
      sorry to answer u late.
      still i have some problem...

      python ffff.py
      []
      True/False A C D E F G H I K L M N P Q R S T V X Y W
      Traceback (most recent call last):
      File "ffff.py", line 50, in <module>
      if num_range[0]<=abs(zcoord)<= num_range[1]:
      TypeError: bad operand type for abs(): 'list'
      bash-3.1$

      some times got comment like "zcoord" is not defined.If i creat a list named zcoord then got only one line output.and another thing is aminoacid position need to be printed first like 1:0,2:0,3:1,4:0 and so on.

      waiting for ur help!
      Thanks again!

      Comment

      • jlm699
        Contributor
        • Jul 2007
        • 314

        #4
        Originally posted by drjekil
        TypeError: bad operand type for abs(): 'list'
        This line is telling you that the abs() command is being passed a list object instead of a single element. Right before the line insert a print command to check what you're passing to this function and try and see if you can't realize your mistake then.

        Comment

        Working...