Canonical way of dealing with null-separated lines?
Nick Coghlan
ncoghlan at iinet.net.au
Sat Feb 26 02:26:11 EST 2005
Douglas Alan wrote:
> Okay, here's the definitive version (or so say I). Some good doobie
> please make sure it makes its way into the standard library:
>
> def fileLineIter(inputFile, newline='\n', leaveNewline=False, readSize=8192):
> """Like the normal file iter but you can set what string indicates newline.
>
> You can also set the read size and control whether or not the newline string
> is left on the end of the iterated lines. Setting newline to '\0' is
> particularly good for use with an input file created with something like
> "os.popen('find -print0')".
> """
> partialLine = []
> while True:
> charsJustRead = inputFile.read(readSize)
> if not charsJustRead: break
> lines = charsJustRead.split(newline)
> if len(lines) > 1:
> partialLine.append(lines[0])
> lines[0] = "".join(partialLine)
> partialLine = [lines.pop()]
> else:
> partialLine.append(lines.pop())
> for line in lines: yield line + ("", newline)[leaveNewline]
> if partialLine and partialLine[-1] != '': yield "".join(partialLine)
>
> |>oug
Hmm, adding optional arguments to file.readlines() would seem to be the place to
start, as well as undeprecating file.xreadlines() (with the same optional
arguments) for the iterator version.
I've put an RFE (#1152248) on Python's Sourceforge project so the idea doesn't
get completely lost. Actually making it happen needs someone to step up and
offer a patch to the relevant C code and documentation, though.
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at email.com | Brisbane, Australia
---------------------------------------------------------------
http://boredomandlaziness.skystorm.net
More information about the Python-list
mailing list