[Python-ideas] struct.unpack should support open files
James Edwards
jheiv at jheiv.com
Mon Dec 24 10:19:35 EST 2018
Here's a snippet of semi-production code we use:
def read_and_unpack(handle, fmt):
size = struct.calcsize(fmt)
data = handle.read(size)
if len(data) < size: return None
return struct.unpack(fmt, data)
which was originally something like:
def read_and_unpack(handle, fmt, offset=None):
if offset is not None:
handle.seek(*offset)
size = struct.calcsize(fmt)
data = handle.read(size)
if len(data) < size: return None
return struct.unpack(fmt, data)
until we pulled file seeking up out of the function.
Having struct.unpack and struct.unpack_from support files would seem
straightforward and be a nice quality of life change, imo.
On Mon, Dec 24, 2018 at 9:36 AM Dan Sommers <
2QdxY4RzWzUUiLuE at potatochowder.com> wrote:
> On 12/24/18 7:33 AM, Steven D'Aprano wrote:
> > On Mon, Dec 24, 2018 at 03:01:07PM +0200, Andrew Svetlov wrote:
>
> >> Handling files overcomplicates both implementation and mental space
> >> for API saving.
>
> > I haven't thought about this very deeply, but at first glance, I like
> > Drew's idea of being able to just pass an open file to unpack and have
> > it read from the file.
>
> The json module has load for files, and loads for bytes and strings,
> That said, JSON is usually read and decoded all at once, but I can see
> lots of use cases for ingesting "unpackable" data in little chunks.
>
> Similarly (but not really), print takes an optional destination that
> overrides the default destination of stdout.
>
> Ironically, StringIO adapts strings so that they can be used in places
> that expect open files.
>
> What about something like gzip.GzipFile (call it struct.StructFile?),
> which is basically a specialized file-like class that packs data on
> writes and unpacks data on reads?
>
> Dan
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20181224/f1847f0f/attachment.html>
More information about the Python-ideas
mailing list