From f51a6df5b25a2bffc3bd4d0b060f6458b1e91b7c Mon Sep 17 00:00:00 2001 From: Eric Coissac Date: Wed, 30 Mar 2016 14:53:25 +0200 Subject: [PATCH] Add a class buffering lines during a text file reading --- python/obitools3/files/linebuffer.pxd | 6 ++++++ python/obitools3/files/linebuffer.pyx | 23 +++++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 python/obitools3/files/linebuffer.pxd create mode 100644 python/obitools3/files/linebuffer.pyx diff --git a/python/obitools3/files/linebuffer.pxd b/python/obitools3/files/linebuffer.pxd new file mode 100644 index 0000000..a867d3e --- /dev/null +++ b/python/obitools3/files/linebuffer.pxd @@ -0,0 +1,6 @@ +#cython: language_level=3 + + +cdef class LineBuffer: + cdef object fileobj + cdef int size diff --git a/python/obitools3/files/linebuffer.pyx b/python/obitools3/files/linebuffer.pyx new file mode 100644 index 0000000..b0dbaf1 --- /dev/null +++ b/python/obitools3/files/linebuffer.pyx @@ -0,0 +1,23 @@ +#cython: language_level=3 + +''' +Created on 30 mars 2016 + +@author: coissac +''' + +cdef class LineBuffer: + + def __init__(self,object fileobj,int size=100000000): + self.fileobj=fileobj + self.size=size + + def __iter__(self): + cdef list buff = self.fileobj.readlines(self.size) + cdef str l + + while buff: + for l in buff: + yield l + buff = self.fileobj.readlines(self.size) +