[Biopython-dev] Reading sequences: FormatIO, SeqIO, etc
Marc Colosimo
mcolosimo at mitre.org
Mon Jul 31 12:08:50 EDT 2006
On Jul 31, 2006, at 11:14 AM, Peter (BioPython Dev) wrote:
>
>>> The SeqUtils/quick_FASTA_reader is interesting in that it loads the
>>> entire file into memory in one go, and then parses it. On the other
>>> hand its not perfect: I would use "\n>" as the split marker
>>> rather than
>>> ">" which could appear in the description of a sequence.
>>
>> I agree (not that it's bitten me, yet), but I'd be inclined to go
>> with
>> "%s>" % os.linesep as the split marker, just in case.
>
> Good point. I wonder how many people even know this function exists?
>
The only problem with this is that if someone sends you a file not
created on your system. I remember hugh problems 5 or so years ago in
BioPerl with dealing with the Mac, Unix, Windows line-ending issues.
This has mostly simplied down to two - Unix and Windows - unless the
person uses a Mac GUI app some of which use \r (CR) instead of \n
(LF) where Windows uses \r\n (CRLF). I think the standard python
disto comes with crlf.py and lfcr.py that can convert the line endings.
> Maybe we should avoid loading entire files into memory while parsing -
> except for those formats like Clustal alignments where there is no
> real
> choice.
>
> Have you got a feeling for the difference in memory required for a
> large
> Fasta file in memory as:
> * Title string, sequence string
> * Title string, sequence as Seq object
> * SeqRecords (which include the sequence as a Seq object)
>
> While its overkill for simple file formats like FASTA, I think we do
> need a fairly high level object like the SeqRecord when dealing with
> things like Genbank/EMBL to hold the basic annotation and identifiers
> (id/name/description).
>
> I am thinking that we should have a set of sequence parsers that all
> return SeqRecord objects (with format specific options in some
> cases to
> control the exact mapping of the data, e.g. title2ids for Fasta
> files).
>
> And a matching set of sequence writers that take SeqRecord object
> (s) and
> write them to a file.
>
> Such a mapping won't be perfect, so maybe there is still a place for
> "format specific representations" like the Record object in
> Bio.GenBank.Record
>
> In the short term maybe we should just replace the internals of the
> current Bio.Fasta module with a pure python implementation like
> that in
> Bio.SeqIO.FASTA - good idea? Bad idea?
I would keep them separate but change the documentation on the how-to
site to point to using the Bio.SeqIO.FASTA since that is where I
think we want people to start going. The code change to Bio.Fasta
should be to add a depreciation warning.
Marc
More information about the Biopython-dev
mailing list