On 5/4/2011 2:31 PM, Spyros Charonis wrote:
Hello everyone,

I have written a program, as part of a bioinformatics project, that extracts motif sequences (programmatically just strings of letters) from a database and writes them to a file. I have written another script to annotate the database file (in plaintext ASCII format) by replacing every match of a motif with a sequence of tildes (~). Primitive I know, but not much more can be done with ASCII files. The code goes as follows:


motif_file = open('myfolder/pythonfiles/final motifs_11SGLOBULIN', 'r') # => final motifs_11sglobulin contains the output of my first program align_file = open('myfolder/pythonfiles/11sglobulin.seqs', 'a+') # => 11sglobulin.seqs is the ASCII sequence alignment file which I want to "annotate" (modify)

finalmotif_seqs = []
finalmotif_length = []  # store length of each motif
finalmotif_annot = []

Following line will fail, as finalmotifs is not defined. It appears to be defined 10 lines later.

for line in finalmotifs:
    finalmotif_seqs.append(line)
    mot_length = len(line)
    finalmotif_length.append(mot_length)

for item in finalmotif_length:
    annotation = '~' * item
    finalmotif_annot.append(annotation)

finalmotifs = motif_file.readlines()
seqalign = align_file.readlines()

for line in seqalign:

Next 2 for statements both use i as the loop index. Even though the program will run it is not a good idea.

    for i in len(finalmotif_seqs):      # for item in finalmotif_seqs:
for i in len(finalmotif_annot): # for item in finalmotif_annot:
            if finalmotif_seqs[i] in line:          # if item in line:
newline = line.replace(finalmotif_seqs[i], finalmotif_annot[i]) #sys.stdout.write(newline) # => print the lines out on the shell
                align_file.writelines(newline)

motif_file.close()
align_file.close()


You need 2 loops, not 3. That is way overkill.You accomplish the same thing with:

# open the 3 files
finalmotifs = motif_file.readlines()
for line in seqalign:
    for item in finalmotifs:
          if item in line:
              align_file.write('~' * len(line) + '\n')
# close the 3 files

--
Bob Gailer
919-636-4239
Chapel Hill NC

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to