From: Raymond Hettinger <python@rcn.com> Date: Mon, 24 Jan 2011 22:14:42 +0000 (+0000) Subject: Add entry for io.BytesIO.getbuffer(). X-Git-Tag: v3.2rc2~56 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f4f0e6c7a754dd13344b61487f4729555604f392;p=python Add entry for io.BytesIO.getbuffer(). --- diff --git a/Doc/whatsnew/3.2.rst b/Doc/whatsnew/3.2.rst index e846a0fe25..1693f7ce0e 100644 --- a/Doc/whatsnew/3.2.rst +++ b/Doc/whatsnew/3.2.rst @@ -992,6 +992,35 @@ implemented:: (Patch submitted by Daniel Urban; :issue:`5867`.) +io +-- + +The :class:`io.BytesIO` has a new method, :meth:`~io.BytesIO.getbuffer`, which +provides functionality similar to :func:`memoryview`. It creates an editable +view of the data without making a copy. The buffer's random access and support +for slice notation are well-suited to in-place editing:: + + import io + + REC_LEN, LOC_START, LOC_LEN = 34, 7, 11 + + def change_location(buffer, record_number, location): + start = record_number * REC_LEN + LOC_START + buffer[start: start+LOC_LEN] = location + + >>> byte_stream = io.BytesIO( + b'G3805 storeroom Main chassis ' + b'X7899 shipping Reserve cog ' + b'L6988 receiving Primary sprocket' + ) + >>> buffer = byte_stream.getbuffer() + >>> change_location(buffer, 1, b'warehouse ') + >>> change_location(buffer, 0, b'showroom ') + >>> print(byte_stream.getvalue()) + b'G3805 showroom Main chassis ' -> + b'X7899 warehouse Reserve cog ' -> + b'L6988 receiving Primary sprocket' + reprlib -------