From 32d8396ee2e29253f6e85ba22d77c45a09d9bfa5 Mon Sep 17 00:00:00 2001 From: Celine Mercier Date: Wed, 17 Oct 2018 11:27:15 +0200 Subject: [PATCH] Cython: Added fasta and fastq writers --- python/obitools3/writers/__init__.py | 0 python/obitools3/writers/fasta.pxd | 9 ++++++ python/obitools3/writers/fasta.pyx | 37 +++++++++++++++++++++++++ python/obitools3/writers/fastq.pxd | 9 ++++++ python/obitools3/writers/fastq.pyx | 41 ++++++++++++++++++++++++++++ 5 files changed, 96 insertions(+) create mode 100644 python/obitools3/writers/__init__.py create mode 100644 python/obitools3/writers/fasta.pxd create mode 100644 python/obitools3/writers/fasta.pyx create mode 100644 python/obitools3/writers/fastq.pxd create mode 100644 python/obitools3/writers/fastq.pyx diff --git a/python/obitools3/writers/__init__.py b/python/obitools3/writers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/python/obitools3/writers/fasta.pxd b/python/obitools3/writers/fasta.pxd new file mode 100644 index 0000000..1fc8426 --- /dev/null +++ b/python/obitools3/writers/fasta.pxd @@ -0,0 +1,9 @@ +#cython: language_level=3 + +cdef class FastaNucWriter: + cdef object formatter + cdef object output + cdef int only + cdef int skip + cdef int skipped + cdef int read \ No newline at end of file diff --git a/python/obitools3/writers/fasta.pyx b/python/obitools3/writers/fasta.pyx new file mode 100644 index 0000000..f20a11b --- /dev/null +++ b/python/obitools3/writers/fasta.pyx @@ -0,0 +1,37 @@ +#cython: language_level=3 + +''' +Created on oct 12th 2018 + +@author: celine.mercier.bioinfo@gmail.com +''' + + +cdef class FastaNucWriter: + + def __init__(self, + object formatter, + object output_object, + int skip=0, + only=None): + + if only is None: + self.only = -1 + else: + self.only = int(only) + + self.formatter = formatter + self.output = output_object + self.skip = skip + self.skipped = 0 + self.read = 0 + + def __call__(self, object seq): + if self.only > -1 and self.read == self.only: + raise StopIteration + if self.skip > 0 and self.skipped < self.skip: + self.skipped += 1 + return + self.output.write(self.formatter(seq)) + self.output.write(b"\n") # TODO is that clean? + self.read += 1 \ No newline at end of file diff --git a/python/obitools3/writers/fastq.pxd b/python/obitools3/writers/fastq.pxd new file mode 100644 index 0000000..6533e51 --- /dev/null +++ b/python/obitools3/writers/fastq.pxd @@ -0,0 +1,9 @@ +#cython: language_level=3 + +cdef class FastqWriter: + cdef object formatter + cdef object output + cdef int only + cdef int skip + cdef int skipped + cdef int read \ No newline at end of file diff --git a/python/obitools3/writers/fastq.pyx b/python/obitools3/writers/fastq.pyx new file mode 100644 index 0000000..21850cb --- /dev/null +++ b/python/obitools3/writers/fastq.pyx @@ -0,0 +1,41 @@ +#cython: language_level=3 + +''' +Created on oct 14th 2018 + +@author: celine.mercier.bioinfo@gmail.com +''' + + +cdef class FastqWriter: + + def __init__(self, + object formatter, + object output_object, + int skip=0, + only=None): + + self.formatter = formatter + self.output = output_object + + if only is None: + self.only = -1 + else: + self.only = int(only) + + self.formatter = formatter + self.output = output_object + self.skip = skip + self.skipped = 0 + self.read = 0 + + + def __call__(self, object seq): + if self.only > -1 and self.read == self.only: + raise StopIteration + if self.skip > 0 and self.skipped < self.skip: + self.skipped += 1 + return + self.output.write(self.formatter(seq)) + self.output.write(b"\n") # TODO is that clean? + self.read += 1 \ No newline at end of file