blob: d5123348195bd972a54aa061e477d78f5c5eacd1 [file] [log] [blame]
Georg Brandl014197c2008-04-09 18:40:51 +00001:mod:`io` --- Core tools for working with streams
2=================================================
3
4.. module:: io
5 :synopsis: Core tools for working with streams.
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04006
Georg Brandl014197c2008-04-09 18:40:51 +00007.. moduleauthor:: Guido van Rossum <guido@python.org>
8.. moduleauthor:: Mike Verdone <mike.verdone@gmail.com>
9.. moduleauthor:: Mark Russell <mark.russell@zen.co.uk>
Benjamin Peterson4fa88fa2009-03-04 00:14:51 +000010.. moduleauthor:: Antoine Pitrou <solipsis@pitrou.net>
11.. moduleauthor:: Amaury Forgeot d'Arc <amauryfa@gmail.com>
Benjamin Petersonef9f2bd2009-05-01 20:45:43 +000012.. moduleauthor:: Benjamin Peterson <benjamin@python.org>
Benjamin Peterson058e31e2009-01-16 03:54:08 +000013.. sectionauthor:: Benjamin Peterson <benjamin@python.org>
Georg Brandl014197c2008-04-09 18:40:51 +000014
Terry Jan Reedyfa089b92016-06-11 15:02:54 -040015**Source code:** :source:`Lib/io.py`
16
17--------------
18
Benjamin Peterson6b4fa772010-08-30 13:19:53 +000019.. _io-overview:
20
Antoine Pitroub530e142010-08-30 12:41:00 +000021Overview
22--------
Georg Brandl014197c2008-04-09 18:40:51 +000023
R David Murray9f0c9402012-08-17 20:33:54 -040024.. 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*.
Georg Brandl014197c2008-04-09 18:40:51 +000033
Srinivas Thatiparthy (శ్రీనివాస్ తాటిపర్తి)cd449802018-11-12 09:36:18 +053034Independent of its category, each concrete stream object will also have
Benjamin Peterson6b4fa772010-08-30 13:19:53 +000035various 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).
Georg Brandl014197c2008-04-09 18:40:51 +000039
Antoine Pitroub530e142010-08-30 12:41:00 +000040All 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
Stéphane Wirtele483f022018-10-26 12:52:11 +020042will raise a :exc:`TypeError`. So will giving a :class:`bytes` object to the
Antoine Pitroub530e142010-08-30 12:41:00 +000043``write()`` method of a text stream.
Georg Brandl014197c2008-04-09 18:40:51 +000044
Antoine Pitroua787b652011-10-12 19:02:52 +020045.. versionchanged:: 3.3
Eli Benderskyf877a7c2012-07-14 21:22:25 +030046 Operations that used to raise :exc:`IOError` now raise :exc:`OSError`, since
47 :exc:`IOError` is now an alias of :exc:`OSError`.
Antoine Pitroua787b652011-10-12 19:02:52 +020048
Benjamin Peterson6b4fa772010-08-30 13:19:53 +000049
Antoine Pitroub530e142010-08-30 12:41:00 +000050Text I/O
51^^^^^^^^
Georg Brandl014197c2008-04-09 18:40:51 +000052
Benjamin Peterson6b4fa772010-08-30 13:19:53 +000053Text 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.
Benjamin Peterson2c5f8282008-04-13 00:27:46 +000057
Benjamin Peterson6b4fa772010-08-30 13:19:53 +000058The easiest way to create a text stream is with :meth:`open()`, optionally
59specifying an encoding::
Antoine Pitroub530e142010-08-30 12:41:00 +000060
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
Eli Benderskyf877a7c2012-07-14 21:22:25 +030067The text stream API is described in detail in the documentation of
Benjamin Peterson6b4fa772010-08-30 13:19:53 +000068:class:`TextIOBase`.
Antoine Pitroub530e142010-08-30 12:41:00 +000069
Antoine Pitroub530e142010-08-30 12:41:00 +000070
71Binary I/O
72^^^^^^^^^^
73
Martin Panter6bb91f32016-05-28 00:41:57 +000074Binary I/O (also called *buffered I/O*) expects
75:term:`bytes-like objects <bytes-like object>` and produces :class:`bytes`
Benjamin Peterson6b4fa772010-08-30 13:19:53 +000076objects. 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.
Antoine Pitroub530e142010-08-30 12:41:00 +000079
Benjamin Peterson6b4fa772010-08-30 13:19:53 +000080The easiest way to create a binary stream is with :meth:`open()` with ``'b'`` in
81the mode string::
Antoine Pitroub530e142010-08-30 12:41:00 +000082
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
Benjamin Peterson6b4fa772010-08-30 13:19:53 +000089The binary stream API is described in detail in the docs of
90:class:`BufferedIOBase`.
Antoine Pitroub530e142010-08-30 12:41:00 +000091
92Other library modules may provide additional ways to create text or binary
Benjamin Peterson6b4fa772010-08-30 13:19:53 +000093streams. See :meth:`socket.socket.makefile` for example.
94
Antoine Pitroub530e142010-08-30 12:41:00 +000095
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
Benjamin Peterson6b4fa772010-08-30 13:19:53 +0000101manipulate a raw stream from user code. Nevertheless, you can create a raw
102stream by opening a file in binary mode with buffering disabled::
Antoine Pitroub530e142010-08-30 12:41:00 +0000103
104 f = open("myfile.jpg", "rb", buffering=0)
105
Benjamin Peterson6b4fa772010-08-30 13:19:53 +0000106The raw stream API is described in detail in the docs of :class:`RawIOBase`.
Benjamin Petersoncc12e1b2010-02-19 00:58:13 +0000107
Georg Brandl014197c2008-04-09 18:40:51 +0000108
Inada Naoki48274832021-03-29 12:28:14 +0900109.. _io-text-encoding:
110
111Text Encoding
112-------------
113
114The default encoding of :class:`TextIOWrapper` and :func:`open` is
115locale-specific (:func:`locale.getpreferredencoding(False) <locale.getpreferredencoding>`).
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
126Additionally, while there is no concrete plan as of yet, Python may change
127the default text file encoding to UTF-8 in the future.
128
129Accordingly, it is highly recommended that you specify the encoding
130explicitly when opening text files. If you want to use UTF-8, pass
131``encoding="utf-8"``. To use the current locale encoding,
132``encoding="locale"`` is supported in Python 3.10.
133
Miss Islington (bot)a5508202021-12-26 03:52:46 -0800134When you need to run existing code on Windows that attempts to open
Inada Naoki48274832021-03-29 12:28:14 +0900135UTF-8 files using the default locale encoding, you can enable the UTF-8
136mode. See :ref:`UTF-8 mode on Windows <win-utf8-mode>`.
137
138.. _io-encoding-warning:
139
140Opt-in EncodingWarning
141^^^^^^^^^^^^^^^^^^^^^^
142
143.. versionadded:: 3.10
144 See :pep:`597` for more details.
145
146To find where the default locale encoding is used, you can enable
147the ``-X warn_default_encoding`` command line option or set the
148:envvar:`PYTHONWARNDEFAULTENCODING` environment variable, which will
149emit an :exc:`EncodingWarning` when the default encoding is used.
150
151If you are providing an API that uses :func:`open` or
152:class:`TextIOWrapper` and passes ``encoding=None`` as a parameter, you
153can use :func:`text_encoding` so that callers of the API will emit an
154:exc:`EncodingWarning` if they don't pass an ``encoding``. However,
155please consider using UTF-8 by default (i.e. ``encoding="utf-8"``) for
156new APIs.
157
158
Antoine Pitroub530e142010-08-30 12:41:00 +0000159High-level Module Interface
160---------------------------
Georg Brandl014197c2008-04-09 18:40:51 +0000161
162.. data:: DEFAULT_BUFFER_SIZE
163
164 An int containing the default buffer size used by the module's buffered I/O
Benjamin Peterson6b4fa772010-08-30 13:19:53 +0000165 classes. :func:`open` uses the file's blksize (as obtained by
Benjamin Peterson2c5f8282008-04-13 00:27:46 +0000166 :func:`os.stat`) if possible.
Georg Brandl014197c2008-04-09 18:40:51 +0000167
Benjamin Peterson6b4fa772010-08-30 13:19:53 +0000168
Andrew Svetlova60de4f2013-02-17 16:55:58 +0200169.. function:: open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
Georg Brandl014197c2008-04-09 18:40:51 +0000170
Benjamin Peterson6b4fa772010-08-30 13:19:53 +0000171 This is an alias for the builtin :func:`open` function.
Georg Brandl014197c2008-04-09 18:40:51 +0000172
Steve Dower44f91c32019-06-27 10:47:59 -0700173 .. audit-event:: open path,mode,flags io.open
Steve Dowerb82e17e2019-05-23 08:45:22 -0700174
Steve Dower60419a72019-06-24 08:42:54 -0700175 This function raises an :ref:`auditing event <auditing>` ``open`` with
Steve Dowerb82e17e2019-05-23 08:45:22 -0700176 arguments ``path``, ``mode`` and ``flags``. The ``mode`` and ``flags``
177 arguments may have been modified or inferred from the original call.
178
179
180.. function:: open_code(path)
181
182 Opens the provided file with mode ``'rb'``. This function should be used
183 when the intent is to treat the contents as executable code.
184
Shantanu831d58d2020-05-01 10:52:10 -0700185 ``path`` should be a :class:`str` and an absolute path.
Steve Dowerb82e17e2019-05-23 08:45:22 -0700186
187 The behavior of this function may be overridden by an earlier call to the
Shantanu831d58d2020-05-01 10:52:10 -0700188 :c:func:`PyFile_SetOpenCodeHook`. However, assuming that ``path`` is a
189 :class:`str` and an absolute path, ``open_code(path)`` should always behave
190 the same as ``open(path, 'rb')``. Overriding the behavior is intended for
191 additional validation or preprocessing of the file.
Steve Dowerb82e17e2019-05-23 08:45:22 -0700192
193 .. versionadded:: 3.8
194
Georg Brandl014197c2008-04-09 18:40:51 +0000195
Inada Naoki48274832021-03-29 12:28:14 +0900196.. function:: text_encoding(encoding, stacklevel=2)
197
198 This is a helper function for callables that use :func:`open` or
199 :class:`TextIOWrapper` and have an ``encoding=None`` parameter.
200
201 This function returns *encoding* if it is not ``None`` and ``"locale"`` if
202 *encoding* is ``None``.
203
204 This function emits an :class:`EncodingWarning` if
205 :data:`sys.flags.warn_default_encoding <sys.flags>` is true and *encoding*
206 is None. *stacklevel* specifies where the warning is emitted.
207 For example::
208
209 def read_text(path, encoding=None):
210 encoding = io.text_encoding(encoding) # stacklevel=2
211 with open(path, encoding) as f:
212 return f.read()
213
214 In this example, an :class:`EncodingWarning` is emitted for the caller of
215 ``read_text()``.
216
217 See :ref:`io-text-encoding` for more information.
218
219 .. versionadded:: 3.10
220
221
Georg Brandl014197c2008-04-09 18:40:51 +0000222.. exception:: BlockingIOError
223
Antoine Pitrouf55011f2011-10-12 18:57:23 +0200224 This is a compatibility alias for the builtin :exc:`BlockingIOError`
225 exception.
Georg Brandl014197c2008-04-09 18:40:51 +0000226
227
228.. exception:: UnsupportedOperation
229
Antoine Pitroua787b652011-10-12 19:02:52 +0200230 An exception inheriting :exc:`OSError` and :exc:`ValueError` that is raised
Georg Brandl014197c2008-04-09 18:40:51 +0000231 when an unsupported operation is called on a stream.
232
233
Antoine Pitroub530e142010-08-30 12:41:00 +0000234.. seealso::
Benjamin Peterson6b4fa772010-08-30 13:19:53 +0000235
Antoine Pitroub530e142010-08-30 12:41:00 +0000236 :mod:`sys`
237 contains the standard IO streams: :data:`sys.stdin`, :data:`sys.stdout`,
238 and :data:`sys.stderr`.
239
240
241Class hierarchy
242---------------
243
Benjamin Peterson6b4fa772010-08-30 13:19:53 +0000244The implementation of I/O streams is organized as a hierarchy of classes. First
245:term:`abstract base classes <abstract base class>` (ABCs), which are used to
246specify the various categories of streams, then concrete classes providing the
247standard stream implementations.
Antoine Pitroub530e142010-08-30 12:41:00 +0000248
249 .. note::
Benjamin Peterson6b4fa772010-08-30 13:19:53 +0000250
251 The abstract base classes also provide default implementations of some
252 methods in order to help implementation of concrete stream classes. For
253 example, :class:`BufferedIOBase` provides unoptimized implementations of
Serhiy Storchakabfdcd432013-10-13 23:09:14 +0300254 :meth:`~IOBase.readinto` and :meth:`~IOBase.readline`.
Antoine Pitroub530e142010-08-30 12:41:00 +0000255
256At the top of the I/O hierarchy is the abstract base class :class:`IOBase`. It
257defines the basic interface to a stream. Note, however, that there is no
258separation between reading and writing to streams; implementations are allowed
Benjamin Peterson6b4fa772010-08-30 13:19:53 +0000259to raise :exc:`UnsupportedOperation` if they do not support a given operation.
Antoine Pitroub530e142010-08-30 12:41:00 +0000260
Benjamin Peterson6b4fa772010-08-30 13:19:53 +0000261The :class:`RawIOBase` ABC extends :class:`IOBase`. It deals with the reading
262and writing of bytes to a stream. :class:`FileIO` subclasses :class:`RawIOBase`
263to provide an interface to files in the machine's file system.
Antoine Pitroub530e142010-08-30 12:41:00 +0000264
Géry Ogam3b58a702019-09-11 16:55:13 +0200265The :class:`BufferedIOBase` ABC extends :class:`IOBase`. It deals with
266buffering on a raw binary stream (:class:`RawIOBase`). Its subclasses,
267:class:`BufferedWriter`, :class:`BufferedReader`, and :class:`BufferedRWPair`
268buffer raw binary streams that are readable, writable, and both readable and writable,
269respectively. :class:`BufferedRandom` provides a buffered interface to seekable streams.
270Another :class:`BufferedIOBase` subclass, :class:`BytesIO`, is a stream of
271in-memory bytes.
Antoine Pitroub530e142010-08-30 12:41:00 +0000272
Géry Ogam3b58a702019-09-11 16:55:13 +0200273The :class:`TextIOBase` ABC extends :class:`IOBase`. It deals with
Benjamin Peterson6b4fa772010-08-30 13:19:53 +0000274streams whose bytes represent text, and handles encoding and decoding to and
Géry Ogam3b58a702019-09-11 16:55:13 +0200275from strings. :class:`TextIOWrapper`, which extends :class:`TextIOBase`, is a buffered text
276interface to a buffered raw stream (:class:`BufferedIOBase`). Finally,
Benjamin Peterson6b4fa772010-08-30 13:19:53 +0000277:class:`StringIO` is an in-memory stream for text.
Antoine Pitroub530e142010-08-30 12:41:00 +0000278
279Argument names are not part of the specification, and only the arguments of
Benjamin Peterson6b4fa772010-08-30 13:19:53 +0000280:func:`open` are intended to be used as keyword arguments.
Antoine Pitroub530e142010-08-30 12:41:00 +0000281
Andrew Svetloved636a82012-12-06 12:20:56 +0200282The following table summarizes the ABCs provided by the :mod:`io` module:
283
Georg Brandl44ea77b2013-03-28 13:28:44 +0100284.. tabularcolumns:: |l|l|L|L|
285
Andrew Svetloved636a82012-12-06 12:20:56 +0200286========================= ================== ======================== ==================================================
287ABC Inherits Stub Methods Mixin Methods and Properties
288========================= ================== ======================== ==================================================
289:class:`IOBase` ``fileno``, ``seek``, ``close``, ``closed``, ``__enter__``,
290 and ``truncate`` ``__exit__``, ``flush``, ``isatty``, ``__iter__``,
291 ``__next__``, ``readable``, ``readline``,
292 ``readlines``, ``seekable``, ``tell``,
293 ``writable``, and ``writelines``
294:class:`RawIOBase` :class:`IOBase` ``readinto`` and Inherited :class:`IOBase` methods, ``read``,
295 ``write`` and ``readall``
Sanyam Khurana1b74f9b2017-12-11 19:12:09 +0530296:class:`BufferedIOBase` :class:`IOBase` ``detach``, ``read``, Inherited :class:`IOBase` methods, ``readinto``,
297 ``read1``, and ``write`` and ``readinto1``
Andrew Svetloved636a82012-12-06 12:20:56 +0200298:class:`TextIOBase` :class:`IOBase` ``detach``, ``read``, Inherited :class:`IOBase` methods, ``encoding``,
299 ``readline``, and ``errors``, and ``newlines``
300 ``write``
301========================= ================== ======================== ==================================================
302
Antoine Pitroub530e142010-08-30 12:41:00 +0000303
Georg Brandl014197c2008-04-09 18:40:51 +0000304I/O Base Classes
Antoine Pitroub530e142010-08-30 12:41:00 +0000305^^^^^^^^^^^^^^^^
Georg Brandl014197c2008-04-09 18:40:51 +0000306
307.. class:: IOBase
308
Miss Islington (bot)bdce1882022-03-04 10:33:57 -0800309 The abstract base class for all I/O classes.
Georg Brandl014197c2008-04-09 18:40:51 +0000310
Mark Summerfielde6d5f302008-04-21 10:29:45 +0000311 This class provides empty abstract implementations for many methods
312 that derived classes can override selectively; the default
313 implementations represent a file that cannot be read, written or
314 seeked.
Georg Brandl014197c2008-04-09 18:40:51 +0000315
Steve Palmer7b97ab32019-04-09 05:35:27 +0100316 Even though :class:`IOBase` does not declare :meth:`read`
Benjamin Peterson2c5f8282008-04-13 00:27:46 +0000317 or :meth:`write` because their signatures will vary, implementations and
318 clients should consider those methods part of the interface. Also,
Antoine Pitroua787b652011-10-12 19:02:52 +0200319 implementations may raise a :exc:`ValueError` (or :exc:`UnsupportedOperation`)
320 when operations they do not support are called.
Georg Brandl014197c2008-04-09 18:40:51 +0000321
322 The basic type used for binary data read from or written to a file is
Martin Panter6bb91f32016-05-28 00:41:57 +0000323 :class:`bytes`. Other :term:`bytes-like objects <bytes-like object>` are
Steve Palmer7b97ab32019-04-09 05:35:27 +0100324 accepted as method arguments too. Text I/O classes work with :class:`str` data.
Georg Brandl014197c2008-04-09 18:40:51 +0000325
Benjamin Peterson2c5f8282008-04-13 00:27:46 +0000326 Note that calling any method (even inquiries) on a closed stream is
Antoine Pitroua787b652011-10-12 19:02:52 +0200327 undefined. Implementations may raise :exc:`ValueError` in this case.
Georg Brandl014197c2008-04-09 18:40:51 +0000328
Éric Araujo3f7c0e42012-12-08 22:53:43 -0500329 :class:`IOBase` (and its subclasses) supports the iterator protocol, meaning
Eli Benderskyf877a7c2012-07-14 21:22:25 +0300330 that an :class:`IOBase` object can be iterated over yielding the lines in a
331 stream. Lines are defined slightly differently depending on whether the
332 stream is a binary stream (yielding bytes), or a text stream (yielding
333 character strings). See :meth:`~IOBase.readline` below.
Georg Brandl014197c2008-04-09 18:40:51 +0000334
Eli Benderskyf877a7c2012-07-14 21:22:25 +0300335 :class:`IOBase` is also a context manager and therefore supports the
Mark Summerfielde6d5f302008-04-21 10:29:45 +0000336 :keyword:`with` statement. In this example, *file* is closed after the
Serhiy Storchaka2b57c432018-12-19 08:09:46 +0200337 :keyword:`!with` statement's suite is finished---even if an exception occurs::
Georg Brandl014197c2008-04-09 18:40:51 +0000338
Mark Summerfielde6d5f302008-04-21 10:29:45 +0000339 with open('spam.txt', 'w') as file:
340 file.write('Spam and eggs!')
Georg Brandl014197c2008-04-09 18:40:51 +0000341
Mark Summerfielde6d5f302008-04-21 10:29:45 +0000342 :class:`IOBase` provides these data attributes and methods:
Georg Brandl014197c2008-04-09 18:40:51 +0000343
344 .. method:: close()
345
Christian Heimesecc42a22008-11-05 19:30:32 +0000346 Flush and close this stream. This method has no effect if the file is
Georg Brandl48310cd2009-01-03 21:18:54 +0000347 already closed. Once the file is closed, any operation on the file
Georg Brandl8569e582010-05-19 20:57:08 +0000348 (e.g. reading or writing) will raise a :exc:`ValueError`.
Antoine Pitrouf9fc08f2010-04-28 19:59:32 +0000349
350 As a convenience, it is allowed to call this method more than once;
351 only the first call, however, will have an effect.
Georg Brandl014197c2008-04-09 18:40:51 +0000352
353 .. attribute:: closed
354
Eli Benderskyf877a7c2012-07-14 21:22:25 +0300355 ``True`` if the stream is closed.
Georg Brandl014197c2008-04-09 18:40:51 +0000356
357 .. method:: fileno()
358
Christian Heimes81ee3ef2008-05-04 22:42:01 +0000359 Return the underlying file descriptor (an integer) of the stream if it
Antoine Pitroua787b652011-10-12 19:02:52 +0200360 exists. An :exc:`OSError` is raised if the IO object does not use a file
Georg Brandl014197c2008-04-09 18:40:51 +0000361 descriptor.
362
363 .. method:: flush()
364
Benjamin Petersonb85a5842008-04-13 21:39:58 +0000365 Flush the write buffers of the stream if applicable. This does nothing
366 for read-only and non-blocking streams.
Georg Brandl014197c2008-04-09 18:40:51 +0000367
368 .. method:: isatty()
369
Christian Heimes81ee3ef2008-05-04 22:42:01 +0000370 Return ``True`` if the stream is interactive (i.e., connected to
Mark Summerfielde6d5f302008-04-21 10:29:45 +0000371 a terminal/tty device).
Georg Brandl014197c2008-04-09 18:40:51 +0000372
373 .. method:: readable()
374
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200375 Return ``True`` if the stream can be read from. If ``False``, :meth:`read`
Antoine Pitroua787b652011-10-12 19:02:52 +0200376 will raise :exc:`OSError`.
Georg Brandl014197c2008-04-09 18:40:51 +0000377
Serhiy Storchaka3c411542013-09-16 23:18:10 +0300378 .. method:: readline(size=-1)
Georg Brandl014197c2008-04-09 18:40:51 +0000379
Serhiy Storchaka3c411542013-09-16 23:18:10 +0300380 Read and return one line from the stream. If *size* is specified, at
381 most *size* bytes will be read.
Georg Brandl014197c2008-04-09 18:40:51 +0000382
Benjamin Peterson2c5f8282008-04-13 00:27:46 +0000383 The line terminator is always ``b'\n'`` for binary files; for text files,
Zachary Ware0069eac2014-07-18 09:11:48 -0500384 the *newline* argument to :func:`open` can be used to select the line
Georg Brandl014197c2008-04-09 18:40:51 +0000385 terminator(s) recognized.
386
Georg Brandl3dd33882009-06-01 17:35:27 +0000387 .. method:: readlines(hint=-1)
Georg Brandl014197c2008-04-09 18:40:51 +0000388
Christian Heimes81ee3ef2008-05-04 22:42:01 +0000389 Read and return a list of lines from the stream. *hint* can be specified
390 to control the number of lines read: no more lines will be read if the
391 total size (in bytes/characters) of all lines so far exceeds *hint*.
Georg Brandl014197c2008-04-09 18:40:51 +0000392
Miss Islington (bot)9b369c92021-07-13 07:41:12 -0700393 *hint* values of ``0`` or less, as well as ``None``, are treated as no
394 hint.
395
Ezio Melottied3cd7e2013-04-15 19:08:31 +0300396 Note that it's already possible to iterate on file objects using ``for
397 line in file: ...`` without calling ``file.readlines()``.
398
Benjamin Peterson2a3d4d92019-07-10 19:43:04 -0700399 .. method:: seek(offset, whence=SEEK_SET)
Benjamin Peterson2c5f8282008-04-13 00:27:46 +0000400
Mark Summerfielde6d5f302008-04-21 10:29:45 +0000401 Change the stream position to the given byte *offset*. *offset* is
Martin Panterdb4220e2015-09-11 03:58:30 +0000402 interpreted relative to the position indicated by *whence*. The default
403 value for *whence* is :data:`SEEK_SET`. Values for *whence* are:
Benjamin Peterson2c5f8282008-04-13 00:27:46 +0000404
Benjamin Peterson0e4caf42009-04-01 21:22:20 +0000405 * :data:`SEEK_SET` or ``0`` -- start of the stream (the default);
406 *offset* should be zero or positive
407 * :data:`SEEK_CUR` or ``1`` -- current stream position; *offset* may
408 be negative
409 * :data:`SEEK_END` or ``2`` -- end of the stream; *offset* is usually
410 negative
Benjamin Peterson2c5f8282008-04-13 00:27:46 +0000411
Christian Heimes81ee3ef2008-05-04 22:42:01 +0000412 Return the new absolute position.
Benjamin Peterson2c5f8282008-04-13 00:27:46 +0000413
Raymond Hettinger35a88362009-04-09 00:08:24 +0000414 .. versionadded:: 3.1
Georg Brandl67b21b72010-08-17 15:07:14 +0000415 The ``SEEK_*`` constants.
Benjamin Peterson0e4caf42009-04-01 21:22:20 +0000416
Jesus Cea94363612012-06-22 18:32:07 +0200417 .. versionadded:: 3.3
418 Some operating systems could support additional values, like
419 :data:`os.SEEK_HOLE` or :data:`os.SEEK_DATA`. The valid values
420 for a file could depend on it being open in text or binary mode.
421
Georg Brandl014197c2008-04-09 18:40:51 +0000422 .. method:: seekable()
423
Christian Heimes81ee3ef2008-05-04 22:42:01 +0000424 Return ``True`` if the stream supports random access. If ``False``,
Antoine Pitroua787b652011-10-12 19:02:52 +0200425 :meth:`seek`, :meth:`tell` and :meth:`truncate` will raise :exc:`OSError`.
Georg Brandl014197c2008-04-09 18:40:51 +0000426
427 .. method:: tell()
428
Christian Heimes81ee3ef2008-05-04 22:42:01 +0000429 Return the current stream position.
Georg Brandl014197c2008-04-09 18:40:51 +0000430
Georg Brandl3dd33882009-06-01 17:35:27 +0000431 .. method:: truncate(size=None)
Benjamin Peterson2c5f8282008-04-13 00:27:46 +0000432
Antoine Pitrou2016dc92010-05-29 12:08:25 +0000433 Resize the stream to the given *size* in bytes (or the current position
434 if *size* is not specified). The current stream position isn't changed.
435 This resizing can extend or reduce the current file size. In case of
436 extension, the contents of the new file area depend on the platform
Steve Dowerfe0a41a2015-03-20 19:50:46 -0700437 (on most systems, additional bytes are zero-filled). The new file size
438 is returned.
439
Emmanuel Arias522630a2019-02-15 16:02:38 -0300440 .. versionchanged:: 3.5
441 Windows will now zero-fill files when extending.
Benjamin Peterson2c5f8282008-04-13 00:27:46 +0000442
Georg Brandl014197c2008-04-09 18:40:51 +0000443 .. method:: writable()
444
Christian Heimes81ee3ef2008-05-04 22:42:01 +0000445 Return ``True`` if the stream supports writing. If ``False``,
Antoine Pitroua787b652011-10-12 19:02:52 +0200446 :meth:`write` and :meth:`truncate` will raise :exc:`OSError`.
Georg Brandl014197c2008-04-09 18:40:51 +0000447
448 .. method:: writelines(lines)
449
Christian Heimes81ee3ef2008-05-04 22:42:01 +0000450 Write a list of lines to the stream. Line separators are not added, so it
451 is usual for each of the lines provided to have a line separator at the
452 end.
Georg Brandl014197c2008-04-09 18:40:51 +0000453
Benjamin Petersonef8abfc2014-06-14 18:51:34 -0700454 .. method:: __del__()
455
456 Prepare for object destruction. :class:`IOBase` provides a default
457 implementation of this method that calls the instance's
458 :meth:`~IOBase.close` method.
459
Georg Brandl014197c2008-04-09 18:40:51 +0000460
461.. class:: RawIOBase
462
Miss Islington (bot)bdce1882022-03-04 10:33:57 -0800463 Base class for raw binary streams. It inherits :class:`IOBase`.
Georg Brandl014197c2008-04-09 18:40:51 +0000464
Géry Ogam3b58a702019-09-11 16:55:13 +0200465 Raw binary streams typically provide low-level access to an underlying OS
466 device or API, and do not try to encapsulate it in high-level primitives
467 (this functionality is done at a higher-level in buffered binary streams and text streams, described later
468 in this page).
Antoine Pitrou497a7672009-09-17 17:18:01 +0000469
Géry Ogam3b58a702019-09-11 16:55:13 +0200470 :class:`RawIOBase` provides these methods in addition to those from
471 :class:`IOBase`:
Georg Brandl014197c2008-04-09 18:40:51 +0000472
Serhiy Storchaka3c411542013-09-16 23:18:10 +0300473 .. method:: read(size=-1)
Georg Brandl014197c2008-04-09 18:40:51 +0000474
Serhiy Storchaka3c411542013-09-16 23:18:10 +0300475 Read up to *size* bytes from the object and return them. As a convenience,
Sanyam Khurana1b74f9b2017-12-11 19:12:09 +0530476 if *size* is unspecified or -1, all bytes until EOF are returned.
477 Otherwise, only one system call is ever made. Fewer than *size* bytes may
478 be returned if the operating system call returns fewer than *size* bytes.
Antoine Pitrou78ddbe62009-10-01 16:24:45 +0000479
Serhiy Storchaka3c411542013-09-16 23:18:10 +0300480 If 0 bytes are returned, and *size* was not 0, this indicates end of file.
Antoine Pitrou78ddbe62009-10-01 16:24:45 +0000481 If the object is in non-blocking mode and no bytes are available,
482 ``None`` is returned.
Georg Brandl014197c2008-04-09 18:40:51 +0000483
Sanyam Khurana1b74f9b2017-12-11 19:12:09 +0530484 The default implementation defers to :meth:`readall` and
485 :meth:`readinto`.
486
Benjamin Petersonb47aace2008-04-09 21:38:38 +0000487 .. method:: readall()
Georg Brandl014197c2008-04-09 18:40:51 +0000488
Christian Heimes81ee3ef2008-05-04 22:42:01 +0000489 Read and return all the bytes from the stream until EOF, using multiple
490 calls to the stream if necessary.
Benjamin Peterson2c5f8282008-04-13 00:27:46 +0000491
492 .. method:: readinto(b)
493
Martin Panter6bb91f32016-05-28 00:41:57 +0000494 Read bytes into a pre-allocated, writable
495 :term:`bytes-like object` *b*, and return the
Steve Palmer7b97ab32019-04-09 05:35:27 +0100496 number of bytes read. For example, *b* might be a :class:`bytearray`.
497 If the object is in non-blocking mode and no bytes
Benjamin Peterson2a1a4902014-06-22 14:19:07 -0700498 are available, ``None`` is returned.
Benjamin Peterson2c5f8282008-04-13 00:27:46 +0000499
500 .. method:: write(b)
501
Martin Panter6bb91f32016-05-28 00:41:57 +0000502 Write the given :term:`bytes-like object`, *b*, to the
503 underlying raw stream, and return the number of
504 bytes written. This can be less than the length of *b* in
505 bytes, depending on specifics of the underlying raw
Eli Benderskyf877a7c2012-07-14 21:22:25 +0300506 stream, and especially if it is in non-blocking mode. ``None`` is
507 returned if the raw stream is set not to block and no single byte could
Martin Panter6bb91f32016-05-28 00:41:57 +0000508 be readily written to it. The caller may release or mutate *b* after
509 this method returns, so the implementation should only access *b*
510 during the method call.
Georg Brandl014197c2008-04-09 18:40:51 +0000511
512
Georg Brandl014197c2008-04-09 18:40:51 +0000513.. class:: BufferedIOBase
514
Antoine Pitrou497a7672009-09-17 17:18:01 +0000515 Base class for binary streams that support some kind of buffering.
Miss Islington (bot)bdce1882022-03-04 10:33:57 -0800516 It inherits :class:`IOBase`.
Georg Brandl014197c2008-04-09 18:40:51 +0000517
Antoine Pitrou497a7672009-09-17 17:18:01 +0000518 The main difference with :class:`RawIOBase` is that methods :meth:`read`,
519 :meth:`readinto` and :meth:`write` will try (respectively) to read as much
520 input as requested or to consume all given output, at the expense of
521 making perhaps more than one system call.
522
523 In addition, those methods can raise :exc:`BlockingIOError` if the
524 underlying raw stream is in non-blocking mode and cannot take or give
525 enough data; unlike their :class:`RawIOBase` counterparts, they will
526 never return ``None``.
527
528 Besides, the :meth:`read` method does not have a default
Georg Brandl014197c2008-04-09 18:40:51 +0000529 implementation that defers to :meth:`readinto`.
530
Antoine Pitrou497a7672009-09-17 17:18:01 +0000531 A typical :class:`BufferedIOBase` implementation should not inherit from a
532 :class:`RawIOBase` implementation, but wrap one, like
533 :class:`BufferedWriter` and :class:`BufferedReader` do.
Georg Brandl014197c2008-04-09 18:40:51 +0000534
Géry Ogam3b58a702019-09-11 16:55:13 +0200535 :class:`BufferedIOBase` provides or overrides these data attributes and
536 methods in addition to those from :class:`IOBase`:
Georg Brandl014197c2008-04-09 18:40:51 +0000537
Benjamin Petersonc609b6b2009-06-28 17:32:20 +0000538 .. attribute:: raw
539
540 The underlying raw stream (a :class:`RawIOBase` instance) that
541 :class:`BufferedIOBase` deals with. This is not part of the
542 :class:`BufferedIOBase` API and may not exist on some implementations.
543
Benjamin Petersond2e0c792009-05-01 20:40:59 +0000544 .. method:: detach()
545
546 Separate the underlying raw stream from the buffer and return it.
547
548 After the raw stream has been detached, the buffer is in an unusable
549 state.
550
551 Some buffers, like :class:`BytesIO`, do not have the concept of a single
552 raw stream to return from this method. They raise
553 :exc:`UnsupportedOperation`.
554
Benjamin Petersonedc36472009-05-01 20:48:14 +0000555 .. versionadded:: 3.1
556
Serhiy Storchaka3c411542013-09-16 23:18:10 +0300557 .. method:: read(size=-1)
Georg Brandl014197c2008-04-09 18:40:51 +0000558
Serhiy Storchaka3c411542013-09-16 23:18:10 +0300559 Read and return up to *size* bytes. If the argument is omitted, ``None``,
560 or negative, data is read and returned until EOF is reached. An empty
Eli Benderskyf877a7c2012-07-14 21:22:25 +0300561 :class:`bytes` object is returned if the stream is already at EOF.
Georg Brandl014197c2008-04-09 18:40:51 +0000562
563 If the argument is positive, and the underlying raw stream is not
564 interactive, multiple raw reads may be issued to satisfy the byte count
565 (unless EOF is reached first). But for interactive raw streams, at most
566 one raw read will be issued, and a short result does not imply that EOF is
567 imminent.
568
Antoine Pitrou497a7672009-09-17 17:18:01 +0000569 A :exc:`BlockingIOError` is raised if the underlying raw stream is in
570 non blocking-mode, and has no data available at the moment.
Georg Brandl014197c2008-04-09 18:40:51 +0000571
Martin Panterccb2c0e2016-10-20 23:48:14 +0000572 .. method:: read1([size])
Benjamin Peterson4fa88fa2009-03-04 00:14:51 +0000573
Benjamin Petersona96fea02014-06-22 14:17:44 -0700574 Read and return up to *size* bytes, with at most one call to the
575 underlying raw stream's :meth:`~RawIOBase.read` (or
Benjamin Peterson2a1a4902014-06-22 14:19:07 -0700576 :meth:`~RawIOBase.readinto`) method. This can be useful if you are
577 implementing your own buffering on top of a :class:`BufferedIOBase`
578 object.
Benjamin Peterson4fa88fa2009-03-04 00:14:51 +0000579
Martin Panter4e946792016-10-21 23:00:10 +0000580 If *size* is ``-1`` (the default), an arbitrary number of bytes are
Martin Panterccb2c0e2016-10-20 23:48:14 +0000581 returned (more than zero unless EOF is reached).
582
Georg Brandl014197c2008-04-09 18:40:51 +0000583 .. method:: readinto(b)
584
Martin Panter6bb91f32016-05-28 00:41:57 +0000585 Read bytes into a pre-allocated, writable
586 :term:`bytes-like object` *b* and return the number of bytes read.
Steve Palmer7b97ab32019-04-09 05:35:27 +0100587 For example, *b* might be a :class:`bytearray`.
Georg Brandl014197c2008-04-09 18:40:51 +0000588
589 Like :meth:`read`, multiple reads may be issued to the underlying raw
Eli Benderskyf877a7c2012-07-14 21:22:25 +0300590 stream, unless the latter is interactive.
Georg Brandl014197c2008-04-09 18:40:51 +0000591
Benjamin Peterson2a1a4902014-06-22 14:19:07 -0700592 A :exc:`BlockingIOError` is raised if the underlying raw stream is in non
593 blocking-mode, and has no data available at the moment.
Georg Brandl014197c2008-04-09 18:40:51 +0000594
Benjamin Petersona96fea02014-06-22 14:17:44 -0700595 .. method:: readinto1(b)
596
Martin Panter6bb91f32016-05-28 00:41:57 +0000597 Read bytes into a pre-allocated, writable
598 :term:`bytes-like object` *b*, using at most one call to
Benjamin Peterson2a1a4902014-06-22 14:19:07 -0700599 the underlying raw stream's :meth:`~RawIOBase.read` (or
600 :meth:`~RawIOBase.readinto`) method. Return the number of bytes read.
Benjamin Petersona96fea02014-06-22 14:17:44 -0700601
Benjamin Peterson2a1a4902014-06-22 14:19:07 -0700602 A :exc:`BlockingIOError` is raised if the underlying raw stream is in non
603 blocking-mode, and has no data available at the moment.
Benjamin Petersona96fea02014-06-22 14:17:44 -0700604
605 .. versionadded:: 3.5
606
Georg Brandl014197c2008-04-09 18:40:51 +0000607 .. method:: write(b)
608
Martin Panter6bb91f32016-05-28 00:41:57 +0000609 Write the given :term:`bytes-like object`, *b*, and return the number
610 of bytes written (always equal to the length of *b* in bytes, since if
Eli Benderskyf877a7c2012-07-14 21:22:25 +0300611 the write fails an :exc:`OSError` will be raised). Depending on the
612 actual implementation, these bytes may be readily written to the
613 underlying stream, or held in a buffer for performance and latency
614 reasons.
Georg Brandl014197c2008-04-09 18:40:51 +0000615
Antoine Pitrou497a7672009-09-17 17:18:01 +0000616 When in non-blocking mode, a :exc:`BlockingIOError` is raised if the
617 data needed to be written to the raw stream but it couldn't accept
618 all the data without blocking.
Georg Brandl014197c2008-04-09 18:40:51 +0000619
Martin Panter6bb91f32016-05-28 00:41:57 +0000620 The caller may release or mutate *b* after this method returns,
621 so the implementation should only access *b* during the method call.
622
Georg Brandl014197c2008-04-09 18:40:51 +0000623
Benjamin Petersonaa069002009-01-23 03:26:36 +0000624Raw File I/O
Antoine Pitroub530e142010-08-30 12:41:00 +0000625^^^^^^^^^^^^
Benjamin Petersonaa069002009-01-23 03:26:36 +0000626
Ross Lagerwall59142db2011-10-31 20:34:46 +0200627.. class:: FileIO(name, mode='r', closefd=True, opener=None)
Benjamin Petersonaa069002009-01-23 03:26:36 +0000628
Géry Ogam3b58a702019-09-11 16:55:13 +0200629 A raw binary stream representing an OS-level file containing bytes data. It
630 inherits :class:`RawIOBase`.
Antoine Pitrou497a7672009-09-17 17:18:01 +0000631
632 The *name* can be one of two things:
633
Eli Benderskyf877a7c2012-07-14 21:22:25 +0300634 * a character string or :class:`bytes` object representing the path to the
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300635 file which will be opened. In this case closefd must be ``True`` (the default)
Robert Collins933430a2014-10-18 13:32:43 +1300636 otherwise an error will be raised.
Antoine Pitrou497a7672009-09-17 17:18:01 +0000637 * an integer representing the number of an existing OS-level file descriptor
Robert Collins933430a2014-10-18 13:32:43 +1300638 to which the resulting :class:`FileIO` object will give access. When the
639 FileIO object is closed this fd will be closed as well, unless *closefd*
640 is set to ``False``.
Benjamin Petersonaa069002009-01-23 03:26:36 +0000641
Charles-François Natalidc3044c2012-01-09 22:40:02 +0100642 The *mode* can be ``'r'``, ``'w'``, ``'x'`` or ``'a'`` for reading
Charles-François Natalid612de12012-01-14 11:51:00 +0100643 (default), writing, exclusive creation or appending. The file will be
644 created if it doesn't exist when opened for writing or appending; it will be
645 truncated when opened for writing. :exc:`FileExistsError` will be raised if
646 it already exists when opened for creating. Opening a file for creating
647 implies writing, so this mode behaves in a similar way to ``'w'``. Add a
648 ``'+'`` to the mode to allow simultaneous reading and writing.
Benjamin Petersonaa069002009-01-23 03:26:36 +0000649
Antoine Pitrou497a7672009-09-17 17:18:01 +0000650 The :meth:`read` (when called with a positive argument), :meth:`readinto`
651 and :meth:`write` methods on this class will only make one system call.
652
Ross Lagerwall59142db2011-10-31 20:34:46 +0200653 A custom opener can be used by passing a callable as *opener*. The underlying
654 file descriptor for the file object is then obtained by calling *opener* with
655 (*name*, *flags*). *opener* must return an open file descriptor (passing
656 :mod:`os.open` as *opener* results in functionality similar to passing
657 ``None``).
658
Victor Stinnerdaf45552013-08-28 00:53:59 +0200659 The newly created file is :ref:`non-inheritable <fd_inheritance>`.
660
Éric Araujo8f423c92012-11-03 17:06:52 -0400661 See the :func:`open` built-in function for examples on using the *opener*
662 parameter.
663
Ross Lagerwall59142db2011-10-31 20:34:46 +0200664 .. versionchanged:: 3.3
665 The *opener* parameter was added.
Charles-François Natalidc3044c2012-01-09 22:40:02 +0100666 The ``'x'`` mode was added.
Ross Lagerwall59142db2011-10-31 20:34:46 +0200667
Victor Stinnerdaf45552013-08-28 00:53:59 +0200668 .. versionchanged:: 3.4
669 The file is now non-inheritable.
670
Géry Ogam3b58a702019-09-11 16:55:13 +0200671 :class:`FileIO` provides these data attributes in addition to those from
672 :class:`RawIOBase` and :class:`IOBase`:
Benjamin Petersonaa069002009-01-23 03:26:36 +0000673
674 .. attribute:: mode
675
676 The mode as given in the constructor.
677
678 .. attribute:: name
679
680 The file name. This is the file descriptor of the file when no name is
681 given in the constructor.
682
Benjamin Petersonaa069002009-01-23 03:26:36 +0000683
684Buffered Streams
Antoine Pitroub530e142010-08-30 12:41:00 +0000685^^^^^^^^^^^^^^^^
Benjamin Petersonaa069002009-01-23 03:26:36 +0000686
Antoine Pitroubed81c82010-12-03 19:14:17 +0000687Buffered I/O streams provide a higher-level interface to an I/O device
688than raw I/O does.
Antoine Pitrou497a7672009-09-17 17:18:01 +0000689
Georg Brandl014197c2008-04-09 18:40:51 +0000690.. class:: BytesIO([initial_bytes])
691
Géry Ogam3b58a702019-09-11 16:55:13 +0200692 A binary stream using an in-memory bytes buffer. It inherits
Serhiy Storchakac057c382015-02-03 02:00:18 +0200693 :class:`BufferedIOBase`. The buffer is discarded when the
694 :meth:`~IOBase.close` method is called.
Georg Brandl014197c2008-04-09 18:40:51 +0000695
Martin Panter6bb91f32016-05-28 00:41:57 +0000696 The optional argument *initial_bytes* is a :term:`bytes-like object` that
697 contains initial data.
Georg Brandl014197c2008-04-09 18:40:51 +0000698
699 :class:`BytesIO` provides or overrides these methods in addition to those
700 from :class:`BufferedIOBase` and :class:`IOBase`:
701
Antoine Pitrou972ee132010-09-06 18:48:21 +0000702 .. method:: getbuffer()
703
704 Return a readable and writable view over the contents of the buffer
705 without copying them. Also, mutating the view will transparently
706 update the contents of the buffer::
707
708 >>> b = io.BytesIO(b"abcdef")
709 >>> view = b.getbuffer()
710 >>> view[2:4] = b"56"
711 >>> b.getvalue()
712 b'ab56ef'
713
714 .. note::
715 As long as the view exists, the :class:`BytesIO` object cannot be
Serhiy Storchakac057c382015-02-03 02:00:18 +0200716 resized or closed.
Antoine Pitrou972ee132010-09-06 18:48:21 +0000717
718 .. versionadded:: 3.2
719
Georg Brandl014197c2008-04-09 18:40:51 +0000720 .. method:: getvalue()
721
Eli Benderskyf877a7c2012-07-14 21:22:25 +0300722 Return :class:`bytes` containing the entire contents of the buffer.
Georg Brandl014197c2008-04-09 18:40:51 +0000723
Serhiy Storchakac057c382015-02-03 02:00:18 +0200724
Martin Panterccb2c0e2016-10-20 23:48:14 +0000725 .. method:: read1([size])
Georg Brandl014197c2008-04-09 18:40:51 +0000726
Martin Panterccb2c0e2016-10-20 23:48:14 +0000727 In :class:`BytesIO`, this is the same as :meth:`~BufferedIOBase.read`.
Georg Brandl014197c2008-04-09 18:40:51 +0000728
Martin Panterccb2c0e2016-10-20 23:48:14 +0000729 .. versionchanged:: 3.7
730 The *size* argument is now optional.
Benjamin Petersona96fea02014-06-22 14:17:44 -0700731
Martin Panterccb2c0e2016-10-20 23:48:14 +0000732 .. method:: readinto1(b)
733
734 In :class:`BytesIO`, this is the same as :meth:`~BufferedIOBase.readinto`.
Benjamin Petersona96fea02014-06-22 14:17:44 -0700735
736 .. versionadded:: 3.5
Georg Brandl014197c2008-04-09 18:40:51 +0000737
Georg Brandl3dd33882009-06-01 17:35:27 +0000738.. class:: BufferedReader(raw, buffer_size=DEFAULT_BUFFER_SIZE)
Georg Brandl014197c2008-04-09 18:40:51 +0000739
Géry Ogam3b58a702019-09-11 16:55:13 +0200740 A buffered binary stream providing higher-level access to a readable, non
741 seekable :class:`RawIOBase` raw binary stream. It inherits
742 :class:`BufferedIOBase`.
743
Antoine Pitrou497a7672009-09-17 17:18:01 +0000744 When reading data from this object, a larger amount of data may be
745 requested from the underlying raw stream, and kept in an internal buffer.
746 The buffered data can then be returned directly on subsequent reads.
Georg Brandl014197c2008-04-09 18:40:51 +0000747
748 The constructor creates a :class:`BufferedReader` for the given readable
749 *raw* stream and *buffer_size*. If *buffer_size* is omitted,
750 :data:`DEFAULT_BUFFER_SIZE` is used.
751
752 :class:`BufferedReader` provides or overrides these methods in addition to
753 those from :class:`BufferedIOBase` and :class:`IOBase`:
754
Serhiy Storchaka3c411542013-09-16 23:18:10 +0300755 .. method:: peek([size])
Georg Brandl014197c2008-04-09 18:40:51 +0000756
Benjamin Petersonc43a26d2009-06-16 23:09:24 +0000757 Return bytes from the stream without advancing the position. At most one
Benjamin Peterson2a8b54d2009-06-14 14:37:23 +0000758 single read on the raw stream is done to satisfy the call. The number of
759 bytes returned may be less or more than requested.
Georg Brandl014197c2008-04-09 18:40:51 +0000760
Serhiy Storchaka3c411542013-09-16 23:18:10 +0300761 .. method:: read([size])
Georg Brandl014197c2008-04-09 18:40:51 +0000762
Serhiy Storchaka3c411542013-09-16 23:18:10 +0300763 Read and return *size* bytes, or if *size* is not given or negative, until
764 EOF or if the read call would block in non-blocking mode.
Georg Brandl014197c2008-04-09 18:40:51 +0000765
Martin Panterccb2c0e2016-10-20 23:48:14 +0000766 .. method:: read1([size])
Georg Brandl014197c2008-04-09 18:40:51 +0000767
Serhiy Storchaka3c411542013-09-16 23:18:10 +0300768 Read and return up to *size* bytes with only one call on the raw stream.
769 If at least one byte is buffered, only buffered bytes are returned.
Georg Brandl014197c2008-04-09 18:40:51 +0000770 Otherwise, one raw stream read call is made.
771
Martin Panterccb2c0e2016-10-20 23:48:14 +0000772 .. versionchanged:: 3.7
773 The *size* argument is now optional.
774
Georg Brandl014197c2008-04-09 18:40:51 +0000775
Georg Brandl3dd33882009-06-01 17:35:27 +0000776.. class:: BufferedWriter(raw, buffer_size=DEFAULT_BUFFER_SIZE)
Georg Brandl014197c2008-04-09 18:40:51 +0000777
Géry Ogam3b58a702019-09-11 16:55:13 +0200778 A buffered binary stream providing higher-level access to a writeable, non
779 seekable :class:`RawIOBase` raw binary stream. It inherits
780 :class:`BufferedIOBase`.
781
Eli Benderskyf877a7c2012-07-14 21:22:25 +0300782 When writing to this object, data is normally placed into an internal
Antoine Pitrou497a7672009-09-17 17:18:01 +0000783 buffer. The buffer will be written out to the underlying :class:`RawIOBase`
784 object under various conditions, including:
785
786 * when the buffer gets too small for all pending data;
787 * when :meth:`flush()` is called;
788 * when a :meth:`seek()` is requested (for :class:`BufferedRandom` objects);
789 * when the :class:`BufferedWriter` object is closed or destroyed.
Georg Brandl014197c2008-04-09 18:40:51 +0000790
791 The constructor creates a :class:`BufferedWriter` for the given writeable
792 *raw* stream. If the *buffer_size* is not given, it defaults to
Benjamin Peterson394ee002009-03-05 22:33:59 +0000793 :data:`DEFAULT_BUFFER_SIZE`.
794
Georg Brandl014197c2008-04-09 18:40:51 +0000795 :class:`BufferedWriter` provides or overrides these methods in addition to
796 those from :class:`BufferedIOBase` and :class:`IOBase`:
797
798 .. method:: flush()
799
800 Force bytes held in the buffer into the raw stream. A
Mark Summerfielde6d5f302008-04-21 10:29:45 +0000801 :exc:`BlockingIOError` should be raised if the raw stream blocks.
Georg Brandl014197c2008-04-09 18:40:51 +0000802
803 .. method:: write(b)
804
Martin Panter6bb91f32016-05-28 00:41:57 +0000805 Write the :term:`bytes-like object`, *b*, and return the
Eli Benderskyf877a7c2012-07-14 21:22:25 +0300806 number of bytes written. When in non-blocking mode, a
807 :exc:`BlockingIOError` is raised if the buffer needs to be written out but
808 the raw stream blocks.
Georg Brandl014197c2008-04-09 18:40:51 +0000809
810
Georg Brandl3dd33882009-06-01 17:35:27 +0000811.. class:: BufferedRandom(raw, buffer_size=DEFAULT_BUFFER_SIZE)
Georg Brandl014197c2008-04-09 18:40:51 +0000812
Géry Ogam3b58a702019-09-11 16:55:13 +0200813 A buffered binary stream providing higher-level access to a seekable
814 :class:`RawIOBase` raw binary stream. It inherits :class:`BufferedReader`
815 and :class:`BufferedWriter`.
Georg Brandl014197c2008-04-09 18:40:51 +0000816
Benjamin Peterson2c5f8282008-04-13 00:27:46 +0000817 The constructor creates a reader and writer for a seekable raw stream, given
Georg Brandl014197c2008-04-09 18:40:51 +0000818 in the first argument. If the *buffer_size* is omitted it defaults to
Benjamin Peterson394ee002009-03-05 22:33:59 +0000819 :data:`DEFAULT_BUFFER_SIZE`.
820
Georg Brandl014197c2008-04-09 18:40:51 +0000821 :class:`BufferedRandom` is capable of anything :class:`BufferedReader` or
Christopher Headb13552c2019-04-12 08:50:41 -0700822 :class:`BufferedWriter` can do. In addition, :meth:`seek` and :meth:`tell`
823 are guaranteed to be implemented.
Georg Brandl014197c2008-04-09 18:40:51 +0000824
825
Antoine Pitrou13d28952011-08-20 19:48:43 +0200826.. class:: BufferedRWPair(reader, writer, buffer_size=DEFAULT_BUFFER_SIZE)
827
Géry Ogam3b58a702019-09-11 16:55:13 +0200828 A buffered binary stream providing higher-level access to two non seekable
829 :class:`RawIOBase` raw binary streams---one readable, the other writeable.
830 It inherits :class:`BufferedIOBase`.
Antoine Pitrou13d28952011-08-20 19:48:43 +0200831
832 *reader* and *writer* are :class:`RawIOBase` objects that are readable and
833 writeable respectively. If the *buffer_size* is omitted it defaults to
834 :data:`DEFAULT_BUFFER_SIZE`.
835
Antoine Pitrou13d28952011-08-20 19:48:43 +0200836 :class:`BufferedRWPair` implements all of :class:`BufferedIOBase`\'s methods
837 except for :meth:`~BufferedIOBase.detach`, which raises
838 :exc:`UnsupportedOperation`.
839
840 .. warning::
Larry Hastings3732ed22014-03-15 21:13:56 -0700841
Antoine Pitrou13d28952011-08-20 19:48:43 +0200842 :class:`BufferedRWPair` does not attempt to synchronize accesses to
843 its underlying raw streams. You should not pass it the same object
844 as reader and writer; use :class:`BufferedRandom` instead.
845
846
Georg Brandl014197c2008-04-09 18:40:51 +0000847Text I/O
Antoine Pitroub530e142010-08-30 12:41:00 +0000848^^^^^^^^
Georg Brandl014197c2008-04-09 18:40:51 +0000849
850.. class:: TextIOBase
851
852 Base class for text streams. This class provides a character and line based
Miss Islington (bot)bdce1882022-03-04 10:33:57 -0800853 interface to stream I/O. It inherits :class:`IOBase`.
Georg Brandl014197c2008-04-09 18:40:51 +0000854
Mark Summerfielde6d5f302008-04-21 10:29:45 +0000855 :class:`TextIOBase` provides or overrides these data attributes and
856 methods in addition to those from :class:`IOBase`:
Georg Brandl014197c2008-04-09 18:40:51 +0000857
858 .. attribute:: encoding
859
Mark Summerfielde6d5f302008-04-21 10:29:45 +0000860 The name of the encoding used to decode the stream's bytes into
Georg Brandl014197c2008-04-09 18:40:51 +0000861 strings, and to encode strings into bytes.
862
Benjamin Peterson0926ad12009-06-06 18:02:12 +0000863 .. attribute:: errors
864
865 The error setting of the decoder or encoder.
866
Georg Brandl014197c2008-04-09 18:40:51 +0000867 .. attribute:: newlines
868
Mark Summerfielde6d5f302008-04-21 10:29:45 +0000869 A string, a tuple of strings, or ``None``, indicating the newlines
Antoine Pitrou497a7672009-09-17 17:18:01 +0000870 translated so far. Depending on the implementation and the initial
871 constructor flags, this may not be available.
Georg Brandl014197c2008-04-09 18:40:51 +0000872
Benjamin Petersonc609b6b2009-06-28 17:32:20 +0000873 .. attribute:: buffer
874
875 The underlying binary buffer (a :class:`BufferedIOBase` instance) that
876 :class:`TextIOBase` deals with. This is not part of the
Eli Benderskyf877a7c2012-07-14 21:22:25 +0300877 :class:`TextIOBase` API and may not exist in some implementations.
Benjamin Petersonc609b6b2009-06-28 17:32:20 +0000878
Benjamin Petersond2e0c792009-05-01 20:40:59 +0000879 .. method:: detach()
880
Antoine Pitrou497a7672009-09-17 17:18:01 +0000881 Separate the underlying binary buffer from the :class:`TextIOBase` and
882 return it.
Benjamin Petersond2e0c792009-05-01 20:40:59 +0000883
884 After the underlying buffer has been detached, the :class:`TextIOBase` is
885 in an unusable state.
886
887 Some :class:`TextIOBase` implementations, like :class:`StringIO`, may not
888 have the concept of an underlying buffer and calling this method will
889 raise :exc:`UnsupportedOperation`.
890
Benjamin Petersonedc36472009-05-01 20:48:14 +0000891 .. versionadded:: 3.1
892
Andrés Delfinob6bb77c2018-07-07 17:17:16 -0300893 .. method:: read(size=-1)
Georg Brandl014197c2008-04-09 18:40:51 +0000894
Serhiy Storchaka3c411542013-09-16 23:18:10 +0300895 Read and return at most *size* characters from the stream as a single
896 :class:`str`. If *size* is negative or ``None``, reads until EOF.
Georg Brandl014197c2008-04-09 18:40:51 +0000897
Serhiy Storchaka3c411542013-09-16 23:18:10 +0300898 .. method:: readline(size=-1)
Georg Brandl014197c2008-04-09 18:40:51 +0000899
Christian Heimes81ee3ef2008-05-04 22:42:01 +0000900 Read until newline or EOF and return a single ``str``. If the stream is
901 already at EOF, an empty string is returned.
Georg Brandl014197c2008-04-09 18:40:51 +0000902
Serhiy Storchaka3c411542013-09-16 23:18:10 +0300903 If *size* is specified, at most *size* characters will be read.
Antoine Pitrou707bd4e2012-07-25 22:38:33 +0200904
Benjamin Peterson2a3d4d92019-07-10 19:43:04 -0700905 .. method:: seek(offset, whence=SEEK_SET)
Antoine Pitrouf49d1522012-01-21 20:20:49 +0100906
Martin Panterdb4220e2015-09-11 03:58:30 +0000907 Change the stream position to the given *offset*. Behaviour depends on
908 the *whence* parameter. The default value for *whence* is
909 :data:`SEEK_SET`.
Antoine Pitrouf49d1522012-01-21 20:20:49 +0100910
911 * :data:`SEEK_SET` or ``0``: seek from the start of the stream
912 (the default); *offset* must either be a number returned by
913 :meth:`TextIOBase.tell`, or zero. Any other *offset* value
914 produces undefined behaviour.
915 * :data:`SEEK_CUR` or ``1``: "seek" to the current position;
916 *offset* must be zero, which is a no-operation (all other values
917 are unsupported).
918 * :data:`SEEK_END` or ``2``: seek to the end of the stream;
919 *offset* must be zero (all other values are unsupported).
920
921 Return the new absolute position as an opaque number.
922
923 .. versionadded:: 3.1
924 The ``SEEK_*`` constants.
925
926 .. method:: tell()
927
928 Return the current stream position as an opaque number. The number
929 does not usually represent a number of bytes in the underlying
930 binary storage.
931
Georg Brandl014197c2008-04-09 18:40:51 +0000932 .. method:: write(s)
933
Christian Heimes81ee3ef2008-05-04 22:42:01 +0000934 Write the string *s* to the stream and return the number of characters
935 written.
Georg Brandl014197c2008-04-09 18:40:51 +0000936
937
Antoine Pitrou664091b2011-07-23 22:00:03 +0200938.. class:: TextIOWrapper(buffer, encoding=None, errors=None, newline=None, \
939 line_buffering=False, write_through=False)
Georg Brandl014197c2008-04-09 18:40:51 +0000940
Géry Ogam3b58a702019-09-11 16:55:13 +0200941 A buffered text stream providing higher-level access to a
942 :class:`BufferedIOBase` buffered binary stream. It inherits
943 :class:`TextIOBase`.
Georg Brandl014197c2008-04-09 18:40:51 +0000944
945 *encoding* gives the name of the encoding that the stream will be decoded or
Andrew Svetlov4805fa82012-08-13 22:11:14 +0300946 encoded with. It defaults to
947 :func:`locale.getpreferredencoding(False) <locale.getpreferredencoding>`.
Inada Naoki48274832021-03-29 12:28:14 +0900948 ``encoding="locale"`` can be used to specify the current locale's encoding
949 explicitly. See :ref:`io-text-encoding` for more information.
Georg Brandl014197c2008-04-09 18:40:51 +0000950
Benjamin Petersonb85a5842008-04-13 21:39:58 +0000951 *errors* is an optional string that specifies how encoding and decoding
952 errors are to be handled. Pass ``'strict'`` to raise a :exc:`ValueError`
953 exception if there is an encoding error (the default of ``None`` has the same
954 effect), or pass ``'ignore'`` to ignore errors. (Note that ignoring encoding
955 errors can lead to data loss.) ``'replace'`` causes a replacement marker
Serhiy Storchaka07985ef2015-01-25 22:56:57 +0200956 (such as ``'?'``) to be inserted where there is malformed data.
957 ``'backslashreplace'`` causes malformed data to be replaced by a
958 backslashed escape sequence. When writing, ``'xmlcharrefreplace'``
959 (replace with the appropriate XML character reference) or ``'namereplace'``
960 (replace with ``\N{...}`` escape sequences) can be used. Any other error
961 handling name that has been registered with
Serhiy Storchaka166ebc42014-11-25 13:57:17 +0200962 :func:`codecs.register_error` is also valid.
Georg Brandl014197c2008-04-09 18:40:51 +0000963
R David Murray1b00f252012-08-15 10:43:58 -0400964 .. index::
965 single: universal newlines; io.TextIOWrapper class
966
Antoine Pitrou0c1c0d42012-08-04 00:55:38 +0200967 *newline* controls how line endings are handled. It can be ``None``,
968 ``''``, ``'\n'``, ``'\r'``, and ``'\r\n'``. It works as follows:
969
R David Murray1b00f252012-08-15 10:43:58 -0400970 * When reading input from the stream, if *newline* is ``None``,
R David Murrayee0a9452012-08-15 11:05:36 -0400971 :term:`universal newlines` mode is enabled. Lines in the input can end in
972 ``'\n'``, ``'\r'``, or ``'\r\n'``, and these are translated into ``'\n'``
Géry Ogam3b58a702019-09-11 16:55:13 +0200973 before being returned to the caller. If *newline* is ``''``, universal
974 newlines mode is enabled, but line endings are returned to the caller
975 untranslated. If *newline* has any of the other legal values, input lines
976 are only terminated by the given string, and the line ending is returned to
977 the caller untranslated.
Antoine Pitrou0c1c0d42012-08-04 00:55:38 +0200978
Georg Brandl296d1be2012-08-14 09:39:07 +0200979 * When writing output to the stream, if *newline* is ``None``, any ``'\n'``
980 characters written are translated to the system default line separator,
981 :data:`os.linesep`. If *newline* is ``''`` or ``'\n'``, no translation
982 takes place. If *newline* is any of the other legal values, any ``'\n'``
983 characters written are translated to the given string.
Georg Brandl014197c2008-04-09 18:40:51 +0000984
985 If *line_buffering* is ``True``, :meth:`flush` is implied when a call to
Elena Oat7ffd4c52018-05-14 17:48:01 +0300986 write contains a newline character or a carriage return.
Georg Brandl014197c2008-04-09 18:40:51 +0000987
Antoine Pitrou664091b2011-07-23 22:00:03 +0200988 If *write_through* is ``True``, calls to :meth:`write` are guaranteed
989 not to be buffered: any data written on the :class:`TextIOWrapper`
990 object is immediately handled to its underlying binary *buffer*.
991
992 .. versionchanged:: 3.3
993 The *write_through* argument has been added.
994
Victor Stinnerf86a5e82012-06-05 13:43:22 +0200995 .. versionchanged:: 3.3
996 The default *encoding* is now ``locale.getpreferredencoding(False)``
997 instead of ``locale.getpreferredencoding()``. Don't change temporary the
998 locale encoding using :func:`locale.setlocale`, use the current locale
999 encoding instead of the user preferred encoding.
1000
Inada Naoki48274832021-03-29 12:28:14 +09001001 .. versionchanged:: 3.10
1002 The *encoding* argument now supports the ``"locale"`` dummy encoding name.
1003
Géry Ogam3b58a702019-09-11 16:55:13 +02001004 :class:`TextIOWrapper` provides these data attributes and methods in
1005 addition to those from :class:`TextIOBase` and :class:`IOBase`:
Georg Brandl014197c2008-04-09 18:40:51 +00001006
Georg Brandl014197c2008-04-09 18:40:51 +00001007 .. attribute:: line_buffering
1008
1009 Whether line buffering is enabled.
Georg Brandl48310cd2009-01-03 21:18:54 +00001010
Antoine Pitrou3c2817b2017-06-03 12:32:28 +02001011 .. attribute:: write_through
1012
1013 Whether writes are passed immediately to the underlying binary
1014 buffer.
1015
1016 .. versionadded:: 3.7
1017
INADA Naoki507434f2017-12-21 09:59:53 +09001018 .. method:: reconfigure(*[, encoding][, errors][, newline][, \
1019 line_buffering][, write_through])
Antoine Pitrou3c2817b2017-06-03 12:32:28 +02001020
INADA Naoki507434f2017-12-21 09:59:53 +09001021 Reconfigure this text stream using new settings for *encoding*,
1022 *errors*, *newline*, *line_buffering* and *write_through*.
1023
1024 Parameters not specified keep current settings, except
Harmon35068bd2019-06-19 16:01:27 -05001025 ``errors='strict'`` is used when *encoding* is specified but
INADA Naoki507434f2017-12-21 09:59:53 +09001026 *errors* is not specified.
1027
1028 It is not possible to change the encoding or newline if some data
1029 has already been read from the stream. On the other hand, changing
1030 encoding after write is possible.
Antoine Pitrou3c2817b2017-06-03 12:32:28 +02001031
1032 This method does an implicit stream flush before setting the
1033 new parameters.
1034
1035 .. versionadded:: 3.7
1036
Georg Brandl014197c2008-04-09 18:40:51 +00001037
Julien Palard5c1f15b2021-01-25 15:46:06 +01001038.. class:: StringIO(initial_value='', newline='\\n')
Georg Brandl014197c2008-04-09 18:40:51 +00001039
Géry Ogam3b58a702019-09-11 16:55:13 +02001040 A text stream using an in-memory text buffer. It inherits
1041 :class:`TextIOBase`.
1042
1043 The text buffer is discarded when the :meth:`~IOBase.close` method is
1044 called.
Georg Brandl014197c2008-04-09 18:40:51 +00001045
Martin Pantercfad5432015-10-10 03:01:20 +00001046 The initial value of the buffer can be set by providing *initial_value*.
1047 If newline translation is enabled, newlines will be encoded as if by
1048 :meth:`~TextIOBase.write`. The stream is positioned at the start of
1049 the buffer.
1050
Géry Ogam3b58a702019-09-11 16:55:13 +02001051 The *newline* argument works like that of :class:`TextIOWrapper`,
1052 except that when writing output to the stream, if *newline* is ``None``,
1053 newlines are written as ``\n`` on all platforms.
Georg Brandl014197c2008-04-09 18:40:51 +00001054
Mark Summerfielde6d5f302008-04-21 10:29:45 +00001055 :class:`StringIO` provides this method in addition to those from
Géry Ogam3b58a702019-09-11 16:55:13 +02001056 :class:`TextIOBase` and :class:`IOBase`:
Georg Brandl014197c2008-04-09 18:40:51 +00001057
1058 .. method:: getvalue()
1059
Serhiy Storchakac057c382015-02-03 02:00:18 +02001060 Return a ``str`` containing the entire contents of the buffer.
Martin Pantercfad5432015-10-10 03:01:20 +00001061 Newlines are decoded as if by :meth:`~TextIOBase.read`, although
1062 the stream position is not changed.
Georg Brandl014197c2008-04-09 18:40:51 +00001063
Georg Brandl2932d932008-05-30 06:27:09 +00001064 Example usage::
1065
1066 import io
1067
1068 output = io.StringIO()
1069 output.write('First line.\n')
1070 print('Second line.', file=output)
1071
1072 # Retrieve file contents -- this will be
1073 # 'First line.\nSecond line.\n'
1074 contents = output.getvalue()
1075
Georg Brandl48310cd2009-01-03 21:18:54 +00001076 # Close object and discard memory buffer --
Georg Brandl2932d932008-05-30 06:27:09 +00001077 # .getvalue() will now raise an exception.
1078 output.close()
Georg Brandl014197c2008-04-09 18:40:51 +00001079
Antoine Pitroub530e142010-08-30 12:41:00 +00001080
R David Murray1b00f252012-08-15 10:43:58 -04001081.. index::
1082 single: universal newlines; io.IncrementalNewlineDecoder class
1083
Georg Brandl014197c2008-04-09 18:40:51 +00001084.. class:: IncrementalNewlineDecoder
1085
R David Murray1b00f252012-08-15 10:43:58 -04001086 A helper codec that decodes newlines for :term:`universal newlines` mode.
1087 It inherits :class:`codecs.IncrementalDecoder`.
Georg Brandl014197c2008-04-09 18:40:51 +00001088
Antoine Pitroubed81c82010-12-03 19:14:17 +00001089
Antoine Pitroubed81c82010-12-03 19:14:17 +00001090Performance
Benjamin Petersonedf51322011-02-24 03:03:46 +00001091-----------
1092
1093This section discusses the performance of the provided concrete I/O
1094implementations.
Antoine Pitroubed81c82010-12-03 19:14:17 +00001095
1096Binary I/O
Benjamin Petersonedf51322011-02-24 03:03:46 +00001097^^^^^^^^^^
Antoine Pitroubed81c82010-12-03 19:14:17 +00001098
Benjamin Petersonedf51322011-02-24 03:03:46 +00001099By reading and writing only large chunks of data even when the user asks for a
1100single byte, buffered I/O hides any inefficiency in calling and executing the
1101operating system's unbuffered I/O routines. The gain depends on the OS and the
1102kind of I/O which is performed. For example, on some modern OSes such as Linux,
1103unbuffered disk I/O can be as fast as buffered I/O. The bottom line, however,
1104is that buffered I/O offers predictable performance regardless of the platform
Eli Benderskyf877a7c2012-07-14 21:22:25 +03001105and the backing device. Therefore, it is almost always preferable to use
1106buffered I/O rather than unbuffered I/O for binary data.
Antoine Pitroubed81c82010-12-03 19:14:17 +00001107
1108Text I/O
Benjamin Petersonedf51322011-02-24 03:03:46 +00001109^^^^^^^^
Antoine Pitroubed81c82010-12-03 19:14:17 +00001110
1111Text I/O over a binary storage (such as a file) is significantly slower than
Benjamin Petersonedf51322011-02-24 03:03:46 +00001112binary I/O over the same storage, because it requires conversions between
1113unicode and binary data using a character codec. This can become noticeable
1114handling huge amounts of text data like large log files. Also,
1115:meth:`TextIOWrapper.tell` and :meth:`TextIOWrapper.seek` are both quite slow
1116due to the reconstruction algorithm used.
Antoine Pitroubed81c82010-12-03 19:14:17 +00001117
1118:class:`StringIO`, however, is a native in-memory unicode container and will
1119exhibit similar speed to :class:`BytesIO`.
1120
1121Multi-threading
1122^^^^^^^^^^^^^^^
1123
Benjamin Petersonedf51322011-02-24 03:03:46 +00001124:class:`FileIO` objects are thread-safe to the extent that the operating system
1125calls (such as ``read(2)`` under Unix) they wrap are thread-safe too.
Antoine Pitroubed81c82010-12-03 19:14:17 +00001126
1127Binary buffered objects (instances of :class:`BufferedReader`,
1128:class:`BufferedWriter`, :class:`BufferedRandom` and :class:`BufferedRWPair`)
1129protect their internal structures using a lock; it is therefore safe to call
1130them from multiple threads at once.
1131
1132:class:`TextIOWrapper` objects are not thread-safe.
1133
1134Reentrancy
1135^^^^^^^^^^
1136
1137Binary buffered objects (instances of :class:`BufferedReader`,
1138:class:`BufferedWriter`, :class:`BufferedRandom` and :class:`BufferedRWPair`)
1139are not reentrant. While reentrant calls will not happen in normal situations,
Benjamin Petersonedf51322011-02-24 03:03:46 +00001140they can arise from doing I/O in a :mod:`signal` handler. If a thread tries to
Eli Benderskyf877a7c2012-07-14 21:22:25 +03001141re-enter a buffered object which it is already accessing, a :exc:`RuntimeError`
1142is raised. Note this doesn't prohibit a different thread from entering the
Benjamin Petersonedf51322011-02-24 03:03:46 +00001143buffered object.
Antoine Pitroubed81c82010-12-03 19:14:17 +00001144
Benjamin Petersonedf51322011-02-24 03:03:46 +00001145The above implicitly extends to text files, since the :func:`open()` function
1146will wrap a buffered object inside a :class:`TextIOWrapper`. This includes
Géry Ogam3b58a702019-09-11 16:55:13 +02001147standard streams and therefore affects the built-in :func:`print()` function as
Benjamin Petersonedf51322011-02-24 03:03:46 +00001148well.