Alignment.read_one() — read sequences one by one from a file

read_one(file, remove_gaps=False, alignment_format='PIR', io=None, allow_alternates=False)
Output:
True only if a sequence was read

This reads a single sequence from an open alignment file into the current alignment. This is useful, for example, when dealing with a very large database of sequences, which you do not want to read into memory in its entirety. The sequences can then be processed individually.

On exit, True is returned if a sequence was read. The read sequence is the only sequence in the final alignment (anything in the alignment before calling this method is erased). If the end of the file was reached without reading a sequence, False is returned.

Arguments are as for Alignment.append(). Note that only 'PIR' or 'FASTA' format files can be read with this command. file should be an open file handle (see modfile.File()). Since only a single sequence is read, if remove_gaps is True, all gaps in the sequence are removed, regardless of whether they are aligned with other sequences in the alignment file.

This command can raise a FileFormatError if the alignment file format is invalid, or a SequenceMismatchError if a 'PIR' sequence does not match that read from PDB (when an empty range is given).
Example: examples/commands/alignment_read_one.py

# Example for: Alignment.read_one()

from modeller import *
env = Environ()

# Create an empty alignment
aln = Alignment(env)

# Open the input alignment file, and get a handle to it:
input = modfile.File('toxin.ali', 'r')
# Same for the output file:
output = modfile.File('toxin-filter.ali', 'w')

# Read sequences one by one from the file handle in PIR format:
while aln.read_one(input, alignment_format='PIR'):
    print("Read code %s" % aln[0].code)
    # Write only X-ray structures to the output file:
    if aln[0].prottyp == 'structureX':
        aln.write(output, alignment_format='FASTA')

# Explicitly close the files (not strictly necessary in this simple
# example, because they'll be closed at the end of the script anyway):
input.close()
output.close()