I routinely use AlignIO in BioPython for manipulating alignments and in context here moving from fasta format to phylip format. Alot of phylogeny packages accept a relaxed (sequence ID) & sequential (sequence) phylip format. This format is user-friendly, helps double-check for alignment errors and can be the essential input format.
A typical bit of code is,
'''
Converts a fasta file to phylip format
'''
from Bio import AlignIO
Class Convert (inheritClass):
def fa2phy (self):
fileOut, fileIn = self._inOut() # builds the path name and deletes any pre-exising outfile
align = AlignIO.read(fileIn, "fasta") # reads the alignment in fasta
AlignIO.write(align, fileOut, "phylip-relaxed") # writes in phylip
The output of "phylip-relaxed" is interleaved format
4 120
virusA_detailed_description ACGTGACG .... ATCCCCAA
virusB_detailed_description ACGTGACG .... ATCGGGAA
virusC_detailed_description ACGTGACG .... ATCAAAAA
virusD_detailed_description ACGTGACG .... ATTTTTAA
ACGTGACG .... ATCCCCAA
ACGTGACG .... ATCGGGAA
ACGTGACG .... ATCAAAAA
ACGTGACG .... ATTTTTAA
Output sought is relaxed-sequential
4 120
virusA_detailed_description ACGTGACG .... ATCCCCAAACGTGACG .... ATCCCCAA
virusB_detailed_description ACGTGACG .... ATCGGGAAACGTGACG .... ATCGGGAA
virusC_detailed_description ACGTGACG .... ATCAAAAAACGTGACG .... ATCAAAAA
virusD_detailed_description ACGTGACG .... ATTTTTAAACGTGACG .... ATTTTTAA
There is an option to allow a sequential format (above). HOWEVER, a "phylip-sequential"
option output is as follows (it truncates the sequence ID to 10 characters,
4 120
virusA_det ACGTGACG .... ATCCCCAAACGTGACG .... ATCCCCAA
virusB_det ACGTGACG .... ATCGGGAAACGTGACG .... ATCGGGAA
virusC_det ACGTGACG .... ATCAAAAAACGTGACG .... ATCAAAAA
virusD_det ACGTGACG .... ATTTTTAAACGTGACG .... ATTTTTAA
No matter how I look through AlignIO options the above is the nearest format. Could anyone point to a IO style solution? I could write it, but that defeats the object (i.e. purpose not an instance of a method).
Note the "...."
in the outputs above are not a typical "sequence identity" symbols, it just means that total length of a line in an interleaved format is 60 nucleotides (it might be 80).