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