def writeMSA(filename, msa, **kwargs): """Returns *filename* containing *msa*, a :class:`.MSA` or :class:`.MSAFile` instance, in the specified *format*, which can be *SELEX*, *Stockholm*, or *FASTA*. If *compressed* is **True** or *filename* ends with :file:`.gz`, a compressed file will be written. :class:`.MSA` instances will be written using C function into uncompressed files. Can also write *CLUSTAL* or *PIR* format files using Python functions.""" fntemp, ext = splitext(filename) ext = ext.lower() compressed = kwargs.get('compressed', ext == '.gz') if compressed and ext != '.gz': filename += '.gz' format = kwargs.get('format', None) if format: try: format = MSAFORMATS[format.lower()] except KeyError: raise ValueError('format {0} is not recognized' .format(repr(format))) else: if ext == '.gz': ext = splitext(fntemp)[1].lower() try: format = MSAEXTMAP[ext] except KeyError: raise ValueError('format is not specified, and file extension ' '{0} is not recognized'.format(repr(ext))) fast = False try: seqarr, _, _ = msa._getArray(), msa.numResidues(), msa.numSequences() except AttributeError: try: msa.getFormat(), msa.getFilename(), msa.getFilter() except AttributeError: raise ValueError('msa must be an MSA or MSAFile instance, not {0}' .format(type(msa).__name__)) else: seqiter = msa else: seqiter = msa fast = True if not fast or compressed: with MSAFile(filename, 'w', format=format) as out: write = out.write [write(seq) for seq in seqiter] else: from prody.utilities import backupFile backupFile(filename) if format == FASTA: from .msaio import writeFasta writeFasta(filename, msa._labels, seqarr, kwargs.get('line_length', LEN_FASTA_LINE)) elif format == CLUSTAL: writeClustal(filename, msa) elif format == PIR: writePIR(filename, msa, **kwargs) else: from .msaio import writeSelex writeSelex(filename, msa._labels, seqarr, stockholm=format != SELEX, label_length=kwargs.get('label_length', LEN_SELEX_LABEL)) return filename
def writeMSA(filename, msa, **kwargs): """Returns *filename* containing *msa*, a :class:`.MSA` or :class:`.MSAFile` instance, in the specified *format*, which can be *SELEX*, *Stockholm*, or *FASTA*. If *compressed* is **True** or *filename* ends with :file:`.gz`, a compressed file will be written. :class:`.MSA` instances will be written using C function into uncompressed files.""" fntemp, ext = splitext(filename) ext = ext.lower() compressed = kwargs.get('compressed', ext == '.gz') if compressed and ext != '.gz': filename += '.gz' format = kwargs.get('format', None) if format: try: format = MSAFORMATS[format.lower()] except KeyError: raise ValueError('format {0} is not recognized' .format(repr(format))) else: if ext == '.gz': ext = splitext(fntemp)[1].lower() try: format = MSAEXTMAP[ext] except KeyError: raise ValueError('format is not specified, and file extension ' '{0} is not recognized'.format(repr(ext))) fast = False try: seqarr, _, _ = msa._getArray(), msa.numResidues(), msa.numSequences() except AttributeError: try: msa.getFormat(), msa.getFilename(), msa.getFilter() except AttributeError: raise ValueError('msa must be an MSA or MSAFile instance, not ' .format(type(msa).__name__)) else: seqiter = msa else: seqiter = msa fast = True if not fast or compressed: with MSAFile(filename, 'w', format=format) as out: write = out.write [write(seq) for seq in seqiter] else: from prody.utilities import backupFile backupFile(filename) if format == FASTA: from .msaio import writeFasta writeFasta(filename, msa._labels, seqarr, kwargs.get('line_length', LEN_FASTA_LINE)) else: from .msaio import writeSelex writeSelex(filename, msa._labels, seqarr, stockholm=format != SELEX, label_length=kwargs.get('label_length', LEN_SELEX_LABEL)) return filename