1:mod:`io` --- Core tools for working with streams
2=================================================
3
4.. module:: io
5   :synopsis: Core tools for working with streams.
6
7.. moduleauthor:: Guido van Rossum <guido@python.org>
8.. moduleauthor:: Mike Verdone <mike.verdone@gmail.com>
9.. moduleauthor:: Mark Russell <mark.russell@zen.co.uk>
10.. moduleauthor:: Antoine Pitrou <solipsis@pitrou.net>
11.. moduleauthor:: Amaury Forgeot d'Arc <amauryfa@gmail.com>
12.. moduleauthor:: Benjamin Peterson <benjamin@python.org>
13.. sectionauthor:: Benjamin Peterson <benjamin@python.org>
14
15**Source code:** :source:`Lib/io.py`
16
17--------------
18
19.. _io-overview:
20
21Overview
22--------
23
24.. index::
25   single: file object; io module
26
27The :mod:`io` module provides Python's main facilities for dealing with various
28types of I/O.  There are three main types of I/O: *text I/O*, *binary I/O*
29and *raw I/O*.  These are generic categories, and various backing stores can
30be used for each of them.  A concrete object belonging to any of these
31categories is called a :term:`file object`.  Other common terms are *stream*
32and *file-like object*.
33
34Independent of its category, each concrete stream object will also have
35various capabilities: it can be read-only, write-only, or read-write. It can
36also allow arbitrary random access (seeking forwards or backwards to any
37location), or only sequential access (for example in the case of a socket or
38pipe).
39
40All streams are careful about the type of data you give to them.  For example
41giving a :class:`str` object to the ``write()`` method of a binary stream
42will raise a :exc:`TypeError`.  So will giving a :class:`bytes` object to the
43``write()`` method of a text stream.
44
45.. versionchanged:: 3.3
46   Operations that used to raise :exc:`IOError` now raise :exc:`OSError`, since
47   :exc:`IOError` is now an alias of :exc:`OSError`.
48
49
50Text I/O
51^^^^^^^^
52
53Text I/O expects and produces :class:`str` objects.  This means that whenever
54the backing store is natively made of bytes (such as in the case of a file),
55encoding and decoding of data is made transparently as well as optional
56translation of platform-specific newline characters.
57
58The easiest way to create a text stream is with :meth:`open()`, optionally
59specifying an encoding::
60
61   f = open("myfile.txt", "r", encoding="utf-8")
62
63In-memory text streams are also available as :class:`StringIO` objects::
64
65   f = io.StringIO("some initial text data")
66
67The text stream API is described in detail in the documentation of
68:class:`TextIOBase`.
69
70
71Binary I/O
72^^^^^^^^^^
73
74Binary I/O (also called *buffered I/O*) expects
75:term:`bytes-like objects <bytes-like object>` and produces :class:`bytes`
76objects.  No encoding, decoding, or newline translation is performed.  This
77category of streams can be used for all kinds of non-text data, and also when
78manual control over the handling of text data is desired.
79
80The easiest way to create a binary stream is with :meth:`open()` with ``'b'`` in
81the mode string::
82
83   f = open("myfile.jpg", "rb")
84
85In-memory binary streams are also available as :class:`BytesIO` objects::
86
87   f = io.BytesIO(b"some initial binary data: \x00\x01")
88
89The binary stream API is described in detail in the docs of
90:class:`BufferedIOBase`.
91
92Other library modules may provide additional ways to create text or binary
93streams.  See :meth:`socket.socket.makefile` for example.
94
95
96Raw I/O
97^^^^^^^
98
99Raw I/O (also called *unbuffered I/O*) is generally used as a low-level
100building-block for binary and text streams; it is rarely useful to directly
101manipulate a raw stream from user code.  Nevertheless, you can create a raw
102stream by opening a file in binary mode with buffering disabled::
103
104   f = open("myfile.jpg", "rb", buffering=0)
105
106The raw stream API is described in detail in the docs of :class:`RawIOBase`.
107
108
109High-level Module Interface
110---------------------------
111
112.. data:: DEFAULT_BUFFER_SIZE
113
114   An int containing the default buffer size used by the module's buffered I/O
115   classes.  :func:`open` uses the file's blksize (as obtained by
116   :func:`os.stat`) if possible.
117
118
119.. function:: open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
120
121   This is an alias for the builtin :func:`open` function.
122
123
124.. exception:: BlockingIOError
125
126   This is a compatibility alias for the builtin :exc:`BlockingIOError`
127   exception.
128
129
130.. exception:: UnsupportedOperation
131
132   An exception inheriting :exc:`OSError` and :exc:`ValueError` that is raised
133   when an unsupported operation is called on a stream.
134
135
136In-memory streams
137^^^^^^^^^^^^^^^^^
138
139It is also possible to use a :class:`str` or :term:`bytes-like object` as a
140file for both reading and writing.  For strings :class:`StringIO` can be used
141like a file opened in text mode.  :class:`BytesIO` can be used like a file
142opened in binary mode.  Both provide full read-write capabilities with random
143access.
144
145
146.. seealso::
147
148   :mod:`sys`
149       contains the standard IO streams: :data:`sys.stdin`, :data:`sys.stdout`,
150       and :data:`sys.stderr`.
151
152
153Class hierarchy
154---------------
155
156The implementation of I/O streams is organized as a hierarchy of classes.  First
157:term:`abstract base classes <abstract base class>` (ABCs), which are used to
158specify the various categories of streams, then concrete classes providing the
159standard stream implementations.
160
161   .. note::
162
163      The abstract base classes also provide default implementations of some
164      methods in order to help implementation of concrete stream classes.  For
165      example, :class:`BufferedIOBase` provides unoptimized implementations of
166      :meth:`~IOBase.readinto` and :meth:`~IOBase.readline`.
167
168At the top of the I/O hierarchy is the abstract base class :class:`IOBase`.  It
169defines the basic interface to a stream.  Note, however, that there is no
170separation between reading and writing to streams; implementations are allowed
171to raise :exc:`UnsupportedOperation` if they do not support a given operation.
172
173The :class:`RawIOBase` ABC extends :class:`IOBase`.  It deals with the reading
174and writing of bytes to a stream.  :class:`FileIO` subclasses :class:`RawIOBase`
175to provide an interface to files in the machine's file system.
176
177The :class:`BufferedIOBase` ABC deals with buffering on a raw byte stream
178(:class:`RawIOBase`).  Its subclasses, :class:`BufferedWriter`,
179:class:`BufferedReader`, and :class:`BufferedRWPair` buffer streams that are
180readable, writable, and both readable and writable.  :class:`BufferedRandom`
181provides a buffered interface to random access streams.  Another
182:class:`BufferedIOBase` subclass, :class:`BytesIO`, is a stream of in-memory
183bytes.
184
185The :class:`TextIOBase` ABC, another subclass of :class:`IOBase`, deals with
186streams whose bytes represent text, and handles encoding and decoding to and
187from strings. :class:`TextIOWrapper`, which extends it, is a buffered text
188interface to a buffered raw stream (:class:`BufferedIOBase`). Finally,
189:class:`StringIO` is an in-memory stream for text.
190
191Argument names are not part of the specification, and only the arguments of
192:func:`open` are intended to be used as keyword arguments.
193
194The following table summarizes the ABCs provided by the :mod:`io` module:
195
196.. tabularcolumns:: |l|l|L|L|
197
198=========================  ==================  ========================  ==================================================
199ABC                        Inherits            Stub Methods              Mixin Methods and Properties
200=========================  ==================  ========================  ==================================================
201:class:`IOBase`                                ``fileno``, ``seek``,     ``close``, ``closed``, ``__enter__``,
202                                               and ``truncate``          ``__exit__``, ``flush``, ``isatty``, ``__iter__``,
203                                                                         ``__next__``, ``readable``, ``readline``,
204                                                                         ``readlines``, ``seekable``, ``tell``,
205                                                                         ``writable``, and ``writelines``
206:class:`RawIOBase`         :class:`IOBase`     ``readinto`` and          Inherited :class:`IOBase` methods, ``read``,
207                                               ``write``                 and ``readall``
208:class:`BufferedIOBase`    :class:`IOBase`     ``detach``, ``read``,     Inherited :class:`IOBase` methods, ``readinto``,
209                                               ``read1``, and ``write``  and ``readinto1``
210:class:`TextIOBase`        :class:`IOBase`     ``detach``, ``read``,     Inherited :class:`IOBase` methods, ``encoding``,
211                                               ``readline``, and         ``errors``, and ``newlines``
212                                               ``write``
213=========================  ==================  ========================  ==================================================
214
215
216I/O Base Classes
217^^^^^^^^^^^^^^^^
218
219.. class:: IOBase
220
221   The abstract base class for all I/O classes, acting on streams of bytes.
222   There is no public constructor.
223
224   This class provides empty abstract implementations for many methods
225   that derived classes can override selectively; the default
226   implementations represent a file that cannot be read, written or
227   seeked.
228
229   Even though :class:`IOBase` does not declare :meth:`read`, :meth:`readinto`,
230   or :meth:`write` because their signatures will vary, implementations and
231   clients should consider those methods part of the interface.  Also,
232   implementations may raise a :exc:`ValueError` (or :exc:`UnsupportedOperation`)
233   when operations they do not support are called.
234
235   The basic type used for binary data read from or written to a file is
236   :class:`bytes`.  Other :term:`bytes-like objects <bytes-like object>` are
237   accepted as method arguments too.  In some cases, such as
238   :meth:`~RawIOBase.readinto`, a writable object such as :class:`bytearray`
239   is required.  Text I/O classes work with :class:`str` data.
240
241   Note that calling any method (even inquiries) on a closed stream is
242   undefined.  Implementations may raise :exc:`ValueError` in this case.
243
244   :class:`IOBase` (and its subclasses) supports the iterator protocol, meaning
245   that an :class:`IOBase` object can be iterated over yielding the lines in a
246   stream.  Lines are defined slightly differently depending on whether the
247   stream is a binary stream (yielding bytes), or a text stream (yielding
248   character strings).  See :meth:`~IOBase.readline` below.
249
250   :class:`IOBase` is also a context manager and therefore supports the
251   :keyword:`with` statement.  In this example, *file* is closed after the
252   :keyword:`!with` statement's suite is finished---even if an exception occurs::
253
254      with open('spam.txt', 'w') as file:
255          file.write('Spam and eggs!')
256
257   :class:`IOBase` provides these data attributes and methods:
258
259   .. method:: close()
260
261      Flush and close this stream. This method has no effect if the file is
262      already closed. Once the file is closed, any operation on the file
263      (e.g. reading or writing) will raise a :exc:`ValueError`.
264
265      As a convenience, it is allowed to call this method more than once;
266      only the first call, however, will have an effect.
267
268   .. attribute:: closed
269
270      ``True`` if the stream is closed.
271
272   .. method:: fileno()
273
274      Return the underlying file descriptor (an integer) of the stream if it
275      exists.  An :exc:`OSError` is raised if the IO object does not use a file
276      descriptor.
277
278   .. method:: flush()
279
280      Flush the write buffers of the stream if applicable.  This does nothing
281      for read-only and non-blocking streams.
282
283   .. method:: isatty()
284
285      Return ``True`` if the stream is interactive (i.e., connected to
286      a terminal/tty device).
287
288   .. method:: readable()
289
290      Return ``True`` if the stream can be read from.  If ``False``, :meth:`read`
291      will raise :exc:`OSError`.
292
293   .. method:: readline(size=-1)
294
295      Read and return one line from the stream.  If *size* is specified, at
296      most *size* bytes will be read.
297
298      The line terminator is always ``b'\n'`` for binary files; for text files,
299      the *newline* argument to :func:`open` can be used to select the line
300      terminator(s) recognized.
301
302   .. method:: readlines(hint=-1)
303
304      Read and return a list of lines from the stream.  *hint* can be specified
305      to control the number of lines read: no more lines will be read if the
306      total size (in bytes/characters) of all lines so far exceeds *hint*.
307
308      Note that it's already possible to iterate on file objects using ``for
309      line in file: ...`` without calling ``file.readlines()``.
310
311   .. method:: seek(offset[, whence])
312
313      Change the stream position to the given byte *offset*.  *offset* is
314      interpreted relative to the position indicated by *whence*.  The default
315      value for *whence* is :data:`SEEK_SET`.  Values for *whence* are:
316
317      * :data:`SEEK_SET` or ``0`` -- start of the stream (the default);
318        *offset* should be zero or positive
319      * :data:`SEEK_CUR` or ``1`` -- current stream position; *offset* may
320        be negative
321      * :data:`SEEK_END` or ``2`` -- end of the stream; *offset* is usually
322        negative
323
324      Return the new absolute position.
325
326      .. versionadded:: 3.1
327         The ``SEEK_*`` constants.
328
329      .. versionadded:: 3.3
330         Some operating systems could support additional values, like
331         :data:`os.SEEK_HOLE` or :data:`os.SEEK_DATA`. The valid values
332         for a file could depend on it being open in text or binary mode.
333
334   .. method:: seekable()
335
336      Return ``True`` if the stream supports random access.  If ``False``,
337      :meth:`seek`, :meth:`tell` and :meth:`truncate` will raise :exc:`OSError`.
338
339   .. method:: tell()
340
341      Return the current stream position.
342
343   .. method:: truncate(size=None)
344
345      Resize the stream to the given *size* in bytes (or the current position
346      if *size* is not specified).  The current stream position isn't changed.
347      This resizing can extend or reduce the current file size.  In case of
348      extension, the contents of the new file area depend on the platform
349      (on most systems, additional bytes are zero-filled).  The new file size
350      is returned.
351
352      .. versionchanged:: 3.5
353         Windows will now zero-fill files when extending.
354
355   .. method:: writable()
356
357      Return ``True`` if the stream supports writing.  If ``False``,
358      :meth:`write` and :meth:`truncate` will raise :exc:`OSError`.
359
360   .. method:: writelines(lines)
361
362      Write a list of lines to the stream.  Line separators are not added, so it
363      is usual for each of the lines provided to have a line separator at the
364      end.
365
366   .. method:: __del__()
367
368      Prepare for object destruction. :class:`IOBase` provides a default
369      implementation of this method that calls the instance's
370      :meth:`~IOBase.close` method.
371
372
373.. class:: RawIOBase
374
375   Base class for raw binary I/O.  It inherits :class:`IOBase`.  There is no
376   public constructor.
377
378   Raw binary I/O typically provides low-level access to an underlying OS
379   device or API, and does not try to encapsulate it in high-level primitives
380   (this is left to Buffered I/O and Text I/O, described later in this page).
381
382   In addition to the attributes and methods from :class:`IOBase`,
383   :class:`RawIOBase` provides the following methods:
384
385   .. method:: read(size=-1)
386
387      Read up to *size* bytes from the object and return them.  As a convenience,
388      if *size* is unspecified or -1, all bytes until EOF are returned.
389      Otherwise, only one system call is ever made.  Fewer than *size* bytes may
390      be returned if the operating system call returns fewer than *size* bytes.
391
392      If 0 bytes are returned, and *size* was not 0, this indicates end of file.
393      If the object is in non-blocking mode and no bytes are available,
394      ``None`` is returned.
395
396      The default implementation defers to :meth:`readall` and
397      :meth:`readinto`.
398
399   .. method:: readall()
400
401      Read and return all the bytes from the stream until EOF, using multiple
402      calls to the stream if necessary.
403
404   .. method:: readinto(b)
405
406      Read bytes into a pre-allocated, writable
407      :term:`bytes-like object` *b*, and return the
408      number of bytes read.  If the object is in non-blocking mode and no bytes
409      are available, ``None`` is returned.
410
411   .. method:: write(b)
412
413      Write the given :term:`bytes-like object`, *b*, to the
414      underlying raw stream, and return the number of
415      bytes written.  This can be less than the length of *b* in
416      bytes, depending on specifics of the underlying raw
417      stream, and especially if it is in non-blocking mode.  ``None`` is
418      returned if the raw stream is set not to block and no single byte could
419      be readily written to it.  The caller may release or mutate *b* after
420      this method returns, so the implementation should only access *b*
421      during the method call.
422
423
424.. class:: BufferedIOBase
425
426   Base class for binary streams that support some kind of buffering.
427   It inherits :class:`IOBase`. There is no public constructor.
428
429   The main difference with :class:`RawIOBase` is that methods :meth:`read`,
430   :meth:`readinto` and :meth:`write` will try (respectively) to read as much
431   input as requested or to consume all given output, at the expense of
432   making perhaps more than one system call.
433
434   In addition, those methods can raise :exc:`BlockingIOError` if the
435   underlying raw stream is in non-blocking mode and cannot take or give
436   enough data; unlike their :class:`RawIOBase` counterparts, they will
437   never return ``None``.
438
439   Besides, the :meth:`read` method does not have a default
440   implementation that defers to :meth:`readinto`.
441
442   A typical :class:`BufferedIOBase` implementation should not inherit from a
443   :class:`RawIOBase` implementation, but wrap one, like
444   :class:`BufferedWriter` and :class:`BufferedReader` do.
445
446   :class:`BufferedIOBase` provides or overrides these methods and attribute in
447   addition to those from :class:`IOBase`:
448
449   .. attribute:: raw
450
451      The underlying raw stream (a :class:`RawIOBase` instance) that
452      :class:`BufferedIOBase` deals with.  This is not part of the
453      :class:`BufferedIOBase` API and may not exist on some implementations.
454
455   .. method:: detach()
456
457      Separate the underlying raw stream from the buffer and return it.
458
459      After the raw stream has been detached, the buffer is in an unusable
460      state.
461
462      Some buffers, like :class:`BytesIO`, do not have the concept of a single
463      raw stream to return from this method.  They raise
464      :exc:`UnsupportedOperation`.
465
466      .. versionadded:: 3.1
467
468   .. method:: read(size=-1)
469
470      Read and return up to *size* bytes.  If the argument is omitted, ``None``,
471      or negative, data is read and returned until EOF is reached.  An empty
472      :class:`bytes` object is returned if the stream is already at EOF.
473
474      If the argument is positive, and the underlying raw stream is not
475      interactive, multiple raw reads may be issued to satisfy the byte count
476      (unless EOF is reached first).  But for interactive raw streams, at most
477      one raw read will be issued, and a short result does not imply that EOF is
478      imminent.
479
480      A :exc:`BlockingIOError` is raised if the underlying raw stream is in
481      non blocking-mode, and has no data available at the moment.
482
483   .. method:: read1([size])
484
485      Read and return up to *size* bytes, with at most one call to the
486      underlying raw stream's :meth:`~RawIOBase.read` (or
487      :meth:`~RawIOBase.readinto`) method.  This can be useful if you are
488      implementing your own buffering on top of a :class:`BufferedIOBase`
489      object.
490
491      If *size* is ``-1`` (the default), an arbitrary number of bytes are
492      returned (more than zero unless EOF is reached).
493
494   .. method:: readinto(b)
495
496      Read bytes into a pre-allocated, writable
497      :term:`bytes-like object` *b* and return the number of bytes read.
498
499      Like :meth:`read`, multiple reads may be issued to the underlying raw
500      stream, unless the latter is interactive.
501
502      A :exc:`BlockingIOError` is raised if the underlying raw stream is in non
503      blocking-mode, and has no data available at the moment.
504
505   .. method:: readinto1(b)
506
507      Read bytes into a pre-allocated, writable
508      :term:`bytes-like object` *b*, using at most one call to
509      the underlying raw stream's :meth:`~RawIOBase.read` (or
510      :meth:`~RawIOBase.readinto`) method. Return the number of bytes read.
511
512      A :exc:`BlockingIOError` is raised if the underlying raw stream is in non
513      blocking-mode, and has no data available at the moment.
514
515      .. versionadded:: 3.5
516
517   .. method:: write(b)
518
519      Write the given :term:`bytes-like object`, *b*, and return the number
520      of bytes written (always equal to the length of *b* in bytes, since if
521      the write fails an :exc:`OSError` will be raised).  Depending on the
522      actual implementation, these bytes may be readily written to the
523      underlying stream, or held in a buffer for performance and latency
524      reasons.
525
526      When in non-blocking mode, a :exc:`BlockingIOError` is raised if the
527      data needed to be written to the raw stream but it couldn't accept
528      all the data without blocking.
529
530      The caller may release or mutate *b* after this method returns,
531      so the implementation should only access *b* during the method call.
532
533
534Raw File I/O
535^^^^^^^^^^^^
536
537.. class:: FileIO(name, mode='r', closefd=True, opener=None)
538
539   :class:`FileIO` represents an OS-level file containing bytes data.
540   It implements the :class:`RawIOBase` interface (and therefore the
541   :class:`IOBase` interface, too).
542
543   The *name* can be one of two things:
544
545   * a character string or :class:`bytes` object representing the path to the
546     file which will be opened. In this case closefd must be ``True`` (the default)
547     otherwise an error will be raised.
548   * an integer representing the number of an existing OS-level file descriptor
549     to which the resulting :class:`FileIO` object will give access. When the
550     FileIO object is closed this fd will be closed as well, unless *closefd*
551     is set to ``False``.
552
553   The *mode* can be ``'r'``, ``'w'``, ``'x'`` or ``'a'`` for reading
554   (default), writing, exclusive creation or appending. The file will be
555   created if it doesn't exist when opened for writing or appending; it will be
556   truncated when opened for writing. :exc:`FileExistsError` will be raised if
557   it already exists when opened for creating. Opening a file for creating
558   implies writing, so this mode behaves in a similar way to ``'w'``. Add a
559   ``'+'`` to the mode to allow simultaneous reading and writing.
560
561   The :meth:`read` (when called with a positive argument), :meth:`readinto`
562   and :meth:`write` methods on this class will only make one system call.
563
564   A custom opener can be used by passing a callable as *opener*. The underlying
565   file descriptor for the file object is then obtained by calling *opener* with
566   (*name*, *flags*). *opener* must return an open file descriptor (passing
567   :mod:`os.open` as *opener* results in functionality similar to passing
568   ``None``).
569
570   The newly created file is :ref:`non-inheritable <fd_inheritance>`.
571
572   See the :func:`open` built-in function for examples on using the *opener*
573   parameter.
574
575   .. versionchanged:: 3.3
576      The *opener* parameter was added.
577      The ``'x'`` mode was added.
578
579   .. versionchanged:: 3.4
580      The file is now non-inheritable.
581
582   In addition to the attributes and methods from :class:`IOBase` and
583   :class:`RawIOBase`, :class:`FileIO` provides the following data
584   attributes:
585
586   .. attribute:: mode
587
588      The mode as given in the constructor.
589
590   .. attribute:: name
591
592      The file name.  This is the file descriptor of the file when no name is
593      given in the constructor.
594
595
596Buffered Streams
597^^^^^^^^^^^^^^^^
598
599Buffered I/O streams provide a higher-level interface to an I/O device
600than raw I/O does.
601
602.. class:: BytesIO([initial_bytes])
603
604   A stream implementation using an in-memory bytes buffer.  It inherits
605   :class:`BufferedIOBase`.  The buffer is discarded when the
606   :meth:`~IOBase.close` method is called.
607
608   The optional argument *initial_bytes* is a :term:`bytes-like object` that
609   contains initial data.
610
611   :class:`BytesIO` provides or overrides these methods in addition to those
612   from :class:`BufferedIOBase` and :class:`IOBase`:
613
614   .. method:: getbuffer()
615
616      Return a readable and writable view over the contents of the buffer
617      without copying them.  Also, mutating the view will transparently
618      update the contents of the buffer::
619
620         >>> b = io.BytesIO(b"abcdef")
621         >>> view = b.getbuffer()
622         >>> view[2:4] = b"56"
623         >>> b.getvalue()
624         b'ab56ef'
625
626      .. note::
627         As long as the view exists, the :class:`BytesIO` object cannot be
628         resized or closed.
629
630      .. versionadded:: 3.2
631
632   .. method:: getvalue()
633
634      Return :class:`bytes` containing the entire contents of the buffer.
635
636
637   .. method:: read1([size])
638
639      In :class:`BytesIO`, this is the same as :meth:`~BufferedIOBase.read`.
640
641      .. versionchanged:: 3.7
642         The *size* argument is now optional.
643
644   .. method:: readinto1(b)
645
646      In :class:`BytesIO`, this is the same as :meth:`~BufferedIOBase.readinto`.
647
648      .. versionadded:: 3.5
649
650.. class:: BufferedReader(raw, buffer_size=DEFAULT_BUFFER_SIZE)
651
652   A buffer providing higher-level access to a readable, sequential
653   :class:`RawIOBase` object.  It inherits :class:`BufferedIOBase`.
654   When reading data from this object, a larger amount of data may be
655   requested from the underlying raw stream, and kept in an internal buffer.
656   The buffered data can then be returned directly on subsequent reads.
657
658   The constructor creates a :class:`BufferedReader` for the given readable
659   *raw* stream and *buffer_size*.  If *buffer_size* is omitted,
660   :data:`DEFAULT_BUFFER_SIZE` is used.
661
662   :class:`BufferedReader` provides or overrides these methods in addition to
663   those from :class:`BufferedIOBase` and :class:`IOBase`:
664
665   .. method:: peek([size])
666
667      Return bytes from the stream without advancing the position.  At most one
668      single read on the raw stream is done to satisfy the call. The number of
669      bytes returned may be less or more than requested.
670
671   .. method:: read([size])
672
673      Read and return *size* bytes, or if *size* is not given or negative, until
674      EOF or if the read call would block in non-blocking mode.
675
676   .. method:: read1([size])
677
678      Read and return up to *size* bytes with only one call on the raw stream.
679      If at least one byte is buffered, only buffered bytes are returned.
680      Otherwise, one raw stream read call is made.
681
682      .. versionchanged:: 3.7
683         The *size* argument is now optional.
684
685
686.. class:: BufferedWriter(raw, buffer_size=DEFAULT_BUFFER_SIZE)
687
688   A buffer providing higher-level access to a writeable, sequential
689   :class:`RawIOBase` object.  It inherits :class:`BufferedIOBase`.
690   When writing to this object, data is normally placed into an internal
691   buffer.  The buffer will be written out to the underlying :class:`RawIOBase`
692   object under various conditions, including:
693
694   * when the buffer gets too small for all pending data;
695   * when :meth:`flush()` is called;
696   * when a :meth:`seek()` is requested (for :class:`BufferedRandom` objects);
697   * when the :class:`BufferedWriter` object is closed or destroyed.
698
699   The constructor creates a :class:`BufferedWriter` for the given writeable
700   *raw* stream.  If the *buffer_size* is not given, it defaults to
701   :data:`DEFAULT_BUFFER_SIZE`.
702
703   :class:`BufferedWriter` provides or overrides these methods in addition to
704   those from :class:`BufferedIOBase` and :class:`IOBase`:
705
706   .. method:: flush()
707
708      Force bytes held in the buffer into the raw stream.  A
709      :exc:`BlockingIOError` should be raised if the raw stream blocks.
710
711   .. method:: write(b)
712
713      Write the :term:`bytes-like object`, *b*, and return the
714      number of bytes written.  When in non-blocking mode, a
715      :exc:`BlockingIOError` is raised if the buffer needs to be written out but
716      the raw stream blocks.
717
718
719.. class:: BufferedRandom(raw, buffer_size=DEFAULT_BUFFER_SIZE)
720
721   A buffered interface to random access streams.  It inherits
722   :class:`BufferedReader` and :class:`BufferedWriter`, and further supports
723   :meth:`seek` and :meth:`tell` functionality.
724
725   The constructor creates a reader and writer for a seekable raw stream, given
726   in the first argument.  If the *buffer_size* is omitted it defaults to
727   :data:`DEFAULT_BUFFER_SIZE`.
728
729   :class:`BufferedRandom` is capable of anything :class:`BufferedReader` or
730   :class:`BufferedWriter` can do.
731
732
733.. class:: BufferedRWPair(reader, writer, buffer_size=DEFAULT_BUFFER_SIZE)
734
735   A buffered I/O object combining two unidirectional :class:`RawIOBase`
736   objects -- one readable, the other writeable -- into a single bidirectional
737   endpoint.  It inherits :class:`BufferedIOBase`.
738
739   *reader* and *writer* are :class:`RawIOBase` objects that are readable and
740   writeable respectively.  If the *buffer_size* is omitted it defaults to
741   :data:`DEFAULT_BUFFER_SIZE`.
742
743   :class:`BufferedRWPair` implements all of :class:`BufferedIOBase`\'s methods
744   except for :meth:`~BufferedIOBase.detach`, which raises
745   :exc:`UnsupportedOperation`.
746
747   .. warning::
748
749      :class:`BufferedRWPair` does not attempt to synchronize accesses to
750      its underlying raw streams.  You should not pass it the same object
751      as reader and writer; use :class:`BufferedRandom` instead.
752
753
754Text I/O
755^^^^^^^^
756
757.. class:: TextIOBase
758
759   Base class for text streams.  This class provides a character and line based
760   interface to stream I/O.  There is no :meth:`readinto` method because
761   Python's character strings are immutable.  It inherits :class:`IOBase`.
762   There is no public constructor.
763
764   :class:`TextIOBase` provides or overrides these data attributes and
765   methods in addition to those from :class:`IOBase`:
766
767   .. attribute:: encoding
768
769      The name of the encoding used to decode the stream's bytes into
770      strings, and to encode strings into bytes.
771
772   .. attribute:: errors
773
774      The error setting of the decoder or encoder.
775
776   .. attribute:: newlines
777
778      A string, a tuple of strings, or ``None``, indicating the newlines
779      translated so far.  Depending on the implementation and the initial
780      constructor flags, this may not be available.
781
782   .. attribute:: buffer
783
784      The underlying binary buffer (a :class:`BufferedIOBase` instance) that
785      :class:`TextIOBase` deals with.  This is not part of the
786      :class:`TextIOBase` API and may not exist in some implementations.
787
788   .. method:: detach()
789
790      Separate the underlying binary buffer from the :class:`TextIOBase` and
791      return it.
792
793      After the underlying buffer has been detached, the :class:`TextIOBase` is
794      in an unusable state.
795
796      Some :class:`TextIOBase` implementations, like :class:`StringIO`, may not
797      have the concept of an underlying buffer and calling this method will
798      raise :exc:`UnsupportedOperation`.
799
800      .. versionadded:: 3.1
801
802   .. method:: read(size=-1)
803
804      Read and return at most *size* characters from the stream as a single
805      :class:`str`.  If *size* is negative or ``None``, reads until EOF.
806
807   .. method:: readline(size=-1)
808
809      Read until newline or EOF and return a single ``str``.  If the stream is
810      already at EOF, an empty string is returned.
811
812      If *size* is specified, at most *size* characters will be read.
813
814   .. method:: seek(offset[, whence])
815
816      Change the stream position to the given *offset*.  Behaviour depends on
817      the *whence* parameter.  The default value for *whence* is
818      :data:`SEEK_SET`.
819
820      * :data:`SEEK_SET` or ``0``: seek from the start of the stream
821        (the default); *offset* must either be a number returned by
822        :meth:`TextIOBase.tell`, or zero.  Any other *offset* value
823        produces undefined behaviour.
824      * :data:`SEEK_CUR` or ``1``: "seek" to the current position;
825        *offset* must be zero, which is a no-operation (all other values
826        are unsupported).
827      * :data:`SEEK_END` or ``2``: seek to the end of the stream;
828        *offset* must be zero (all other values are unsupported).
829
830      Return the new absolute position as an opaque number.
831
832      .. versionadded:: 3.1
833         The ``SEEK_*`` constants.
834
835   .. method:: tell()
836
837      Return the current stream position as an opaque number.  The number
838      does not usually represent a number of bytes in the underlying
839      binary storage.
840
841   .. method:: write(s)
842
843      Write the string *s* to the stream and return the number of characters
844      written.
845
846
847.. class:: TextIOWrapper(buffer, encoding=None, errors=None, newline=None, \
848                         line_buffering=False, write_through=False)
849
850   A buffered text stream over a :class:`BufferedIOBase` binary stream.
851   It inherits :class:`TextIOBase`.
852
853   *encoding* gives the name of the encoding that the stream will be decoded or
854   encoded with.  It defaults to
855   :func:`locale.getpreferredencoding(False) <locale.getpreferredencoding>`.
856
857   *errors* is an optional string that specifies how encoding and decoding
858   errors are to be handled.  Pass ``'strict'`` to raise a :exc:`ValueError`
859   exception if there is an encoding error (the default of ``None`` has the same
860   effect), or pass ``'ignore'`` to ignore errors.  (Note that ignoring encoding
861   errors can lead to data loss.)  ``'replace'`` causes a replacement marker
862   (such as ``'?'``) to be inserted where there is malformed data.
863   ``'backslashreplace'`` causes malformed data to be replaced by a
864   backslashed escape sequence.  When writing, ``'xmlcharrefreplace'``
865   (replace with the appropriate XML character reference)  or ``'namereplace'``
866   (replace with ``\N{...}`` escape sequences) can be used.  Any other error
867   handling name that has been registered with
868   :func:`codecs.register_error` is also valid.
869
870   .. index::
871      single: universal newlines; io.TextIOWrapper class
872
873   *newline* controls how line endings are handled.  It can be ``None``,
874   ``''``, ``'\n'``, ``'\r'``, and ``'\r\n'``.  It works as follows:
875
876   * When reading input from the stream, if *newline* is ``None``,
877     :term:`universal newlines` mode is enabled.  Lines in the input can end in
878     ``'\n'``, ``'\r'``, or ``'\r\n'``, and these are translated into ``'\n'``
879     before being returned to the caller.  If it is ``''``, universal newlines
880     mode is enabled, but line endings are returned to the caller untranslated.
881     If it has any of the other legal values, input lines are only terminated
882     by the given string, and the line ending is returned to the caller
883     untranslated.
884
885   * When writing output to the stream, if *newline* is ``None``, any ``'\n'``
886     characters written are translated to the system default line separator,
887     :data:`os.linesep`.  If *newline* is ``''`` or ``'\n'``, no translation
888     takes place.  If *newline* is any of the other legal values, any ``'\n'``
889     characters written are translated to the given string.
890
891   If *line_buffering* is ``True``, :meth:`flush` is implied when a call to
892   write contains a newline character or a carriage return.
893
894   If *write_through* is ``True``, calls to :meth:`write` are guaranteed
895   not to be buffered: any data written on the :class:`TextIOWrapper`
896   object is immediately handled to its underlying binary *buffer*.
897
898   .. versionchanged:: 3.3
899      The *write_through* argument has been added.
900
901   .. versionchanged:: 3.3
902      The default *encoding* is now ``locale.getpreferredencoding(False)``
903      instead of ``locale.getpreferredencoding()``. Don't change temporary the
904      locale encoding using :func:`locale.setlocale`, use the current locale
905      encoding instead of the user preferred encoding.
906
907   :class:`TextIOWrapper` provides these members in addition to those of
908   :class:`TextIOBase` and its parents:
909
910   .. attribute:: line_buffering
911
912      Whether line buffering is enabled.
913
914   .. attribute:: write_through
915
916      Whether writes are passed immediately to the underlying binary
917      buffer.
918
919      .. versionadded:: 3.7
920
921   .. method:: reconfigure(*[, encoding][, errors][, newline][, \
922                           line_buffering][, write_through])
923
924      Reconfigure this text stream using new settings for *encoding*,
925      *errors*, *newline*, *line_buffering* and *write_through*.
926
927      Parameters not specified keep current settings, except
928      ``errors='strict`` is used when *encoding* is specified but
929      *errors* is not specified.
930
931      It is not possible to change the encoding or newline if some data
932      has already been read from the stream. On the other hand, changing
933      encoding after write is possible.
934
935      This method does an implicit stream flush before setting the
936      new parameters.
937
938      .. versionadded:: 3.7
939
940
941.. class:: StringIO(initial_value='', newline='\\n')
942
943   An in-memory stream for text I/O.  The text buffer is discarded when the
944   :meth:`~IOBase.close` method is called.
945
946   The initial value of the buffer can be set by providing *initial_value*.
947   If newline translation is enabled, newlines will be encoded as if by
948   :meth:`~TextIOBase.write`.  The stream is positioned at the start of
949   the buffer.
950
951   The *newline* argument works like that of :class:`TextIOWrapper`.
952   The default is to consider only ``\n`` characters as ends of lines and
953   to do no newline translation.  If *newline* is set to ``None``,
954   newlines are written as ``\n`` on all platforms, but universal
955   newline decoding is still performed when reading.
956
957   :class:`StringIO` provides this method in addition to those from
958   :class:`TextIOBase` and its parents:
959
960   .. method:: getvalue()
961
962      Return a ``str`` containing the entire contents of the buffer.
963      Newlines are decoded as if by :meth:`~TextIOBase.read`, although
964      the stream position is not changed.
965
966   Example usage::
967
968      import io
969
970      output = io.StringIO()
971      output.write('First line.\n')
972      print('Second line.', file=output)
973
974      # Retrieve file contents -- this will be
975      # 'First line.\nSecond line.\n'
976      contents = output.getvalue()
977
978      # Close object and discard memory buffer --
979      # .getvalue() will now raise an exception.
980      output.close()
981
982
983.. index::
984   single: universal newlines; io.IncrementalNewlineDecoder class
985
986.. class:: IncrementalNewlineDecoder
987
988   A helper codec that decodes newlines for :term:`universal newlines` mode.
989   It inherits :class:`codecs.IncrementalDecoder`.
990
991
992Performance
993-----------
994
995This section discusses the performance of the provided concrete I/O
996implementations.
997
998Binary I/O
999^^^^^^^^^^
1000
1001By reading and writing only large chunks of data even when the user asks for a
1002single byte, buffered I/O hides any inefficiency in calling and executing the
1003operating system's unbuffered I/O routines.  The gain depends on the OS and the
1004kind of I/O which is performed.  For example, on some modern OSes such as Linux,
1005unbuffered disk I/O can be as fast as buffered I/O.  The bottom line, however,
1006is that buffered I/O offers predictable performance regardless of the platform
1007and the backing device.  Therefore, it is almost always preferable to use
1008buffered I/O rather than unbuffered I/O for binary data.
1009
1010Text I/O
1011^^^^^^^^
1012
1013Text I/O over a binary storage (such as a file) is significantly slower than
1014binary I/O over the same storage, because it requires conversions between
1015unicode and binary data using a character codec.  This can become noticeable
1016handling huge amounts of text data like large log files.  Also,
1017:meth:`TextIOWrapper.tell` and :meth:`TextIOWrapper.seek` are both quite slow
1018due to the reconstruction algorithm used.
1019
1020:class:`StringIO`, however, is a native in-memory unicode container and will
1021exhibit similar speed to :class:`BytesIO`.
1022
1023Multi-threading
1024^^^^^^^^^^^^^^^
1025
1026:class:`FileIO` objects are thread-safe to the extent that the operating system
1027calls (such as ``read(2)`` under Unix) they wrap are thread-safe too.
1028
1029Binary buffered objects (instances of :class:`BufferedReader`,
1030:class:`BufferedWriter`, :class:`BufferedRandom` and :class:`BufferedRWPair`)
1031protect their internal structures using a lock; it is therefore safe to call
1032them from multiple threads at once.
1033
1034:class:`TextIOWrapper` objects are not thread-safe.
1035
1036Reentrancy
1037^^^^^^^^^^
1038
1039Binary buffered objects (instances of :class:`BufferedReader`,
1040:class:`BufferedWriter`, :class:`BufferedRandom` and :class:`BufferedRWPair`)
1041are not reentrant.  While reentrant calls will not happen in normal situations,
1042they can arise from doing I/O in a :mod:`signal` handler.  If a thread tries to
1043re-enter a buffered object which it is already accessing, a :exc:`RuntimeError`
1044is raised.  Note this doesn't prohibit a different thread from entering the
1045buffered object.
1046
1047The above implicitly extends to text files, since the :func:`open()` function
1048will wrap a buffered object inside a :class:`TextIOWrapper`.  This includes
1049standard streams and therefore affects the built-in function :func:`print()` as
1050well.
1051
1052