]> granicus.if.org Git - python/commitdiff
Add entry for io.BytesIO.getbuffer().
authorRaymond Hettinger <python@rcn.com>
Mon, 24 Jan 2011 22:14:42 +0000 (22:14 +0000)
committerRaymond Hettinger <python@rcn.com>
Mon, 24 Jan 2011 22:14:42 +0000 (22:14 +0000)
Doc/whatsnew/3.2.rst

index e846a0fe25a0d0bdb5e50c53c6f8382f72162b3f..1693f7ce0ef740ddc1b2a7e99b6235b658a436de 100644 (file)
@@ -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
 -------