Kaydet (Commit) 25d535ea authored tarafından Antoine Pitrou's avatar Antoine Pitrou

Merged revisions 84827-84829 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r84827 | antoine.pitrou | 2010-09-15 11:58:26 +0200 (mer., 15 sept. 2010) | 3 lines

  Add a glossary entry for file objects.
........
  r84828 | antoine.pitrou | 2010-09-15 12:08:31 +0200 (mer., 15 sept. 2010) | 3 lines

  Update file-related information in the FAQ.
........
  r84829 | antoine.pitrou | 2010-09-15 13:11:28 +0200 (mer., 15 sept. 2010) | 3 lines

  Add cross-references to the glossary entry for file objects.
........
üst ecbf2dea
......@@ -209,8 +209,8 @@ have to remember to change two places in your program -- the second occurrence
is hidden at the bottom of the loop.
The best approach is to use iterators, making it possible to loop through
objects using the ``for`` statement. For example, in the current version of
Python file objects support the iterator protocol, so you can now write simply::
objects using the ``for`` statement. For example, :term:`file objects
<file object>` support the iterator protocol, so you can write simply::
for line in f:
... # do something with line...
......
......@@ -454,7 +454,7 @@ contents, use :func:`shutil.rmtree`.
To rename a file, use ``os.rename(old_path, new_path)``.
To truncate a file, open it using ``f = open(filename, "r+")``, and use
To truncate a file, open it using ``f = open(filename, "rb+")``, and use
``f.truncate(offset)``; offset defaults to the current seek position. There's
also ```os.ftruncate(fd, offset)`` for files opened with :func:`os.open`, where
``fd`` is the file descriptor (a small integer).
......@@ -483,9 +483,9 @@ in big-endian format from a file::
import struct
f = open(filename, "rb") # Open in binary mode for portability
s = f.read(8)
x, y, z = struct.unpack(">hhl", s)
with open(filename, "rb") as f:
s = f.read(8)
x, y, z = struct.unpack(">hhl", s)
The '>' in the format string forces big-endian data; the letter 'h' reads one
"short integer" (2 bytes), and 'l' reads one "long integer" (4 bytes) from the
......@@ -494,6 +494,13 @@ string.
For data that is more regular (e.g. a homogeneous list of ints or thefloats),
you can also use the :mod:`array` module.
.. note::
To read and write binary data, it is mandatory to open the file in
binary mode (here, passing ``"rb"`` to :func:`open`). If you use
``"r"`` instead (the default), the file will be open in text mode
and ``f.read()`` will return :class:`str` objects rather than
:class:`bytes` objects.
I can't seem to use os.read() on a pipe created with os.popen(); why?
---------------------------------------------------------------------
......@@ -597,27 +604,29 @@ For Unix, see a Usenet post by Mitch Chapman:
Why doesn't closing sys.stdout (stdin, stderr) really close it?
---------------------------------------------------------------
Python file objects are a high-level layer of abstraction on top of C streams,
which in turn are a medium-level layer of abstraction on top of (among other
things) low-level C file descriptors.
Python :term:`file objects <file object>` are a high-level layer of
abstraction on low-level C file descriptors.
For most file objects you create in Python via the builtin ``file`` constructor,
``f.close()`` marks the Python file object as being closed from Python's point
of view, and also arranges to close the underlying C stream. This also happens
automatically in f's destructor, when f becomes garbage.
For most file objects you create in Python via the built-in :func:`open`
function, ``f.close()`` marks the Python file object as being closed from
Python's point of view, and also arranges to close the underlying C file
descriptor. This also happens automatically in ``f``'s destructor, when
``f`` becomes garbage.
But stdin, stdout and stderr are treated specially by Python, because of the
special status also given to them by C. Running ``sys.stdout.close()`` marks
the Python-level file object as being closed, but does *not* close the
associated C stream.
associated C file descriptor.
To close the underlying C file descriptor for one of these three, you should
first be sure that's what you really want to do (e.g., you may confuse
extension modules trying to do I/O). If it is, use :func:`os.close`::
To close the underlying C stream for one of these three, you should first be
sure that's what you really want to do (e.g., you may confuse extension modules
trying to do I/O). If it is, use os.close::
os.close(stdin.fileno())
os.close(stdout.fileno())
os.close(stderr.fileno())
os.close(0) # close C's stdin stream
os.close(1) # close C's stdout stream
os.close(2) # close C's stderr stream
Or you can use the numeric constants 0, 1 and 2, respectively.
Network/Internet Programming
......
......@@ -178,6 +178,23 @@ Glossary
A module written in C or C++, using Python's C API to interact with the core and
with user code.
file object
An object exposing a file-oriented API (with methods such as
:meth:`read()` or :meth:`write()`) to an underlying resource.
Depending on the way it was created, a file object can mediate access
to a real on-disk file or to another other type of storage or
communication device (for example standard input/output, in-memory
buffers, sockets, pipes, etc.). File objects are also called
:dfn:`file-like objects` or :dfn:`streams`.
There are actually three categories of file objects: raw binary
files, buffered binary files and text files. Their interfaces are
defined in the :mod:`io` module. The canonical way to create a
file object is by using the :func:`open` function.
file-like object
A synonym for :term:`file object`.
finder
An object that tries to find the :term:`loader` for a module. It must
implement a method named :meth:`find_module`. See :pep:`302` for
......
......@@ -40,10 +40,10 @@ Module :mod:`aifc` defines the following function:
.. function:: open(file, mode=None)
Open an AIFF or AIFF-C file and return an object instance with methods that are
described below. The argument *file* is either a string naming a file or a file
object. *mode* must be ``'r'`` or ``'rb'`` when the file must be opened for
reading, or ``'w'`` or ``'wb'`` when the file must be opened for writing. If
omitted, ``file.mode`` is used if it exists, otherwise ``'rb'`` is used. When
described below. The argument *file* is either a string naming a file or a
:term:`file object`. *mode* must be ``'r'`` or ``'rb'`` when the file must be
opened for reading, or ``'w'`` or ``'wb'`` when the file must be opened for writing.
If omitted, ``file.mode`` is used if it exists, otherwise ``'rb'`` is used. When
used for writing, the file object should be seekable, unless you know ahead of
time how many samples you are going to write in total and use
:meth:`writeframesraw` and :meth:`setnframes`.
......
......@@ -138,11 +138,11 @@ The following data items and methods are also supported:
.. method:: array.fromfile(f, n)
Read *n* items (as machine values) from the file object *f* and append them to
the end of the array. If less than *n* items are available, :exc:`EOFError` is
raised, but the items that were available are still inserted into the array.
*f* must be a real built-in file object; something else with a :meth:`read`
method won't do.
Read *n* items (as machine values) from the :term:`file object` *f* and append
them to the end of the array. If less than *n* items are available,
:exc:`EOFError` is raised, but the items that were available are still
inserted into the array. *f* must be a real built-in file object; something
else with a :meth:`read` method won't do.
.. method:: array.fromlist(list)
......@@ -196,7 +196,7 @@ The following data items and methods are also supported:
.. method:: array.tofile(f)
Write all items (as machine values) to the file object *f*.
Write all items (as machine values) to the :term:`file object` *f*.
.. method:: array.tolist()
......
......@@ -224,9 +224,9 @@ any that have been added to the map during asynchronous service) is closed.
.. class:: file_dispatcher()
A file_dispatcher takes a file descriptor or file object along with an
optional map argument and wraps it for use with the :cfunc:`poll` or
:cfunc:`loop` functions. If provided a file object or anything with a
A file_dispatcher takes a file descriptor or :term:`file object` along
with an optional map argument and wraps it for use with the :cfunc:`poll`
or :cfunc:`loop` functions. If provided a file object or anything with a
:cfunc:`fileno` method, that method will be called and passed to the
:class:`file_wrapper` constructor. Availability: UNIX.
......
......@@ -122,9 +122,9 @@ The legacy interface:
.. function:: decode(input, output)
Decode the contents of the binary *input* file and write the resulting binary
data to the *output* file. *input* and *output* must either be file objects
or objects that mimic the file object interface working with bytes
objects. *input* will be read until ``input.read()`` returns an empty string.
data to the *output* file. *input* and *output* must be :term:`file objects
<file object>`. *input* will be read until ``input.read()`` returns an empty
bytes object.
.. function:: decodebytes(s)
......@@ -138,11 +138,10 @@ The legacy interface:
.. function:: encode(input, output)
Encode the contents of the binary *input* file and write the resulting base64
encoded data to the *output* file. *input* and *output* must either be file
objects or objects that mimic the file object interface working with bytes
objects. *input* will be read until ``input.read()`` returns an empty string.
:func:`encode` returns the encoded data plus a trailing newline character
(``b'\n'``).
encoded data to the *output* file. *input* and *output* must be :term:`file
objects <file object>`. *input* will be read until ``input.read()`` returns
an empty bytes object. :func:`encode` returns the encoded data plus a trailing
newline character (``b'\n'``).
.. function:: encodebytes(s)
......
......@@ -25,8 +25,8 @@ Here is a summary of the features offered by the bz2 module:
* :class:`BZ2File` class implements universal newline support;
* :class:`BZ2File` class offers an optimized line iteration using the readahead
algorithm borrowed from file objects;
* :class:`BZ2File` class offers an optimized line iteration using a readahead
algorithm;
* Sequential (de)compression supported by :class:`BZ2Compressor` and
:class:`BZ2Decompressor` classes;
......
......@@ -298,7 +298,7 @@ RawConfigParser Objects
.. method:: RawConfigParser.write(fileobject)
Write a representation of the configuration to the specified file object,
Write a representation of the configuration to the specified :term:`file object`,
which must be opened in text mode (accepting strings). This representation
can be parsed by a future :meth:`read` call.
......
......@@ -50,9 +50,9 @@ The :mod:`csv` module defines the following functions:
Return a reader object which will iterate over lines in the given *csvfile*.
*csvfile* can be any object which supports the :term:`iterator` protocol and returns a
string each time its :meth:`!next` method is called --- file objects and list
objects are both suitable. If *csvfile* is a file object, it should be opened
with ``newline=''``. [#]_ An optional
string each time its :meth:`!next` method is called --- :term:`file objects
<file object>` and list objects are both suitable. If *csvfile* is a file object,
it should be opened with ``newline=''``. [#]_ An optional
*dialect* parameter can be given which is used to define a set of parameters
specific to a particular CSV dialect. It may be an instance of a subclass of
the :class:`Dialect` class or one of the strings returned by the
......
......@@ -28,9 +28,9 @@ Here are the public methods of the :class:`Generator` class, imported from the
.. class:: Generator(outfp, mangle_from_=True, maxheaderlen=78)
The constructor for the :class:`Generator` class takes a file-like object called
*outfp* for an argument. *outfp* must support the :meth:`write` method and be
usable as the output file for the :func:`print` function.
The constructor for the :class:`Generator` class takes a :term:`file-like object`
called *outfp* for an argument. *outfp* must support the :meth:`write` method
and be usable as the output file for the :func:`print` function.
Optional *mangle_from_* is a flag that, when ``True``, puts a ``>`` character in
front of any line in the body that starts exactly as ``From``, i.e. ``From``
......
......@@ -154,9 +154,9 @@ in the top-level :mod:`email` package namespace.
.. function:: message_from_file(fp[, _class][, strict])
Return a message object structure tree from an open file object. This is
exactly equivalent to ``Parser().parse(fp)``. Optional *_class* and *strict*
are interpreted as with the :class:`Parser` class constructor.
Return a message object structure tree from an open :term:`file object`.
This is exactly equivalent to ``Parser().parse(fp)``. Optional *_class*
and *strict* are interpreted as with the :class:`Parser` class constructor.
Here's an example of how you might use this at an interactive Python prompt::
......
......@@ -142,8 +142,8 @@ The following exceptions are the exceptions that are actually raised.
.. exception:: IOError
Raised when an I/O operation (such as the built-in :func:`print` or
:func:`open` functions or a method of a file object) fails for an I/O-related
reason, e.g., "file not found" or "disk full".
:func:`open` functions or a method of a :term:`file object`) fails for an
I/O-related reason, e.g., "file not found" or "disk full".
This class is derived from :exc:`EnvironmentError`. See the discussion above
for more information on exception instance attributes.
......
......@@ -27,8 +27,8 @@ in this chapter is:
.. seealso::
Module :mod:`os`
Operating system interfaces, including functions to work with files at a lower
level than the built-in file object.
Operating system interfaces, including functions to work with files at a
lower level than Python :term:`file objects <file object>`.
Module :mod:`io`
Python's built-in I/O library, including both abstract classes and
......
......@@ -339,8 +339,8 @@ this module. Most applications will need to derive new writer classes from the
.. class:: DumbWriter(file=None, maxcol=72)
Simple writer class which writes output on the file object passed in as *file*
or, if *file* is omitted, on standard output. The output is simply word-wrapped
to the number of columns specified by *maxcol*. This class is suitable for
reflowing a sequence of paragraphs.
Simple writer class which writes output on the :term:`file object` passed
in as *file* or, if *file* is omitted, on standard output. The output is
simply word-wrapped to the number of columns specified by *maxcol*. This
class is suitable for reflowing a sequence of paragraphs.
......@@ -194,19 +194,19 @@ followed by ``lines`` for the text version or ``binary`` for the binary version.
.. method:: FTP.storbinary(cmd, file, blocksize=8192, callback=None)
Store a file in binary transfer mode. *cmd* should be an appropriate
``STOR`` command: ``"STOR filename"``. *file* is an open file object which is
read until EOF using its :meth:`read` method in blocks of size *blocksize* to
provide the data to be stored. The *blocksize* argument defaults to 8192.
*callback* is an optional single parameter callable that is called
on each block of data after it is sent.
``STOR`` command: ``"STOR filename"``. *file* is an open :term:`file object`
which is read until EOF using its :meth:`read` method in blocks of size
*blocksize* to provide the data to be stored. The *blocksize* argument
defaults to 8192. *callback* is an optional single parameter callable that
is called on each block of data after it is sent.
.. method:: FTP.storlines(cmd, file, callback=None)
Store a file in ASCII transfer mode. *cmd* should be an appropriate
``STOR`` command (see :meth:`storbinary`). Lines are read until EOF from the
open file object *file* using its :meth:`readline` method to provide the data to
be stored. *callback* is an optional single parameter callable
open :term:`file object` *file* using its :meth:`readline` method to provide
the data to be stored. *callback* is an optional single parameter callable
that is called on each line after it is sent.
......
......@@ -173,8 +173,8 @@ class can also install themselves in the built-in namespace as the function
associated :file:`.mo` file paths. Instances with identical :file:`.mo` file
names are cached. The actual class instantiated is either *class_* if
provided, otherwise :class:`GNUTranslations`. The class's constructor must
take a single file object argument. If provided, *codeset* will change the
charset used to encode translated strings in the :meth:`lgettext` and
take a single :term:`file object` argument. If provided, *codeset* will change
the charset used to encode translated strings in the :meth:`lgettext` and
:meth:`lngettext` methods.
If multiple files are found, later files are used as fallbacks for earlier ones.
......@@ -219,7 +219,7 @@ are the methods of :class:`NullTranslations`:
.. class:: NullTranslations(fp=None)
Takes an optional file object *fp*, which is ignored by the base class.
Takes an optional :term:`file object` *fp*, which is ignored by the base class.
Initializes "protected" instance variables *_info* and *_charset* which are set
by derived classes, as well as *_fallback*, which is set through
:meth:`add_fallback`. It then calls ``self._parse(fp)`` if *fp* is not
......
......@@ -9,10 +9,9 @@ like the GNU programs :program:`gzip` and :program:`gunzip` would.
The data compression is provided by the :mod:`zlib` module.
The :mod:`gzip` module provides the :class:`GzipFile` class which is modeled
after Python's File Object. The :class:`GzipFile` class reads and writes
:program:`gzip`\ -format files, automatically compressing or decompressing the
data so that it looks like an ordinary file object.
The :mod:`gzip` module provides the :class:`GzipFile` class. The :class:`GzipFile`
class reads and writes :program:`gzip`\ -format files, automatically compressing
or decompressing the data so that it looks like an ordinary :term:`file object`.
Note that additional file formats which can be decompressed by the
:program:`gzip` and :program:`gunzip` programs, such as those produced by
......@@ -27,7 +26,7 @@ The module defines the following items:
.. class:: GzipFile(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)
Constructor for the :class:`GzipFile` class, which simulates most of the methods
of a file object, with the exception of the :meth:`readinto` and
of a :term:`file object`, with the exception of the :meth:`readinto` and
:meth:`truncate` methods. At least one of *fileobj* and *filename* must be
given a non-trivial value.
......
......@@ -359,7 +359,7 @@ HTTPConnection Objects
object. The Content-Length header is set to the length of the
string.
The *body* may also be an open file object, in which case the
The *body* may also be an open :term:`file object`, in which case the
contents of the file is sent; this file object should support
``fileno()`` and ``read()`` methods. The header Content-Length is
automatically set to the length of the file as reported by
......
......@@ -48,8 +48,8 @@ This module provides an interface to the mechanisms used to implement the
If search is successful, the return value is a 3-element tuple ``(file,
pathname, description)``:
*file* is an open file object positioned at the beginning, *pathname* is the
pathname of the file found, and *description* is a 3-element tuple as
*file* is an open :term:`file object` positioned at the beginning, *pathname*
is the pathname of the file found, and *description* is a 3-element tuple as
contained in the list returned by :func:`get_suffixes` describing the kind of
module found.
......
......@@ -5,14 +5,13 @@
:synopsis: Interface to memory-mapped files for Unix and Windows.
Memory-mapped file objects behave like both :class:`bytes` and like file
objects. Unlike normal :class:`bytes` objects, however, these are mutable.
You can use mmap objects in most places where :class:`bytes` are expected; for
example, you can use the :mod:`re` module to search through a memory-mapped file.
Since they're mutable, you can change a single byte by doing ``obj[index] = 97``,
or change a subsequence by assigning to a slice: ``obj[i1:i2] = b'...'``.
You can also read and write data starting at the current file position, and
:meth:`seek` through the file to different positions.
Memory-mapped file objects behave like both :class:`bytearray` and like
:term:`file objects <file object>`. You can use mmap objects in most places
where :class:`bytearray` are expected; for example, you can use the :mod:`re`
module to search through a memory-mapped file. You can also change a single
byte by doing ``obj[index] = 97``, or change a subsequence by assigning to a
slice: ``obj[i1:i2] = b'...'``. You can also read and write data starting at
the current file position, and :meth:`seek` through the file to different positions.
A memory-mapped file is created by the :class:`mmap` constructor, which is
different on Unix and on Windows. In either case you must provide a file
......
......@@ -143,9 +143,9 @@ indicates an error, the method raises one of the above exceptions.
*groups* is a list of group names that are new since the given date and time. If
the *file* parameter is supplied, then the output of the ``NEWGROUPS`` command
is stored in a file. If *file* is a string, then the method will open a file
object with that name, write to it then close it. If *file* is a file object,
then it will start calling :meth:`write` on it to store the lines of the command
output. If *file* is supplied, then the returned *list* is an empty list.
object with that name, write to it then close it. If *file* is a :term:`file
object`, then it will start calling :meth:`write` on it to store the lines of
the command output. If *file* is supplied, then the returned *list* is an empty list.
.. method:: NNTP.newnews(group, date, time, [file])
......@@ -155,9 +155,9 @@ indicates an error, the method raises one of the above exceptions.
``(response, articles)`` where *articles* is a list of message ids. If the
*file* parameter is supplied, then the output of the ``NEWNEWS`` command is
stored in a file. If *file* is a string, then the method will open a file
object with that name, write to it then close it. If *file* is a file object,
then it will start calling :meth:`write` on it to store the lines of the command
output. If *file* is supplied, then the returned *list* is an empty list.
object with that name, write to it then close it. If *file* is a :term:`file
object`, then it will start calling :meth:`write` on it to store the lines of the
command output. If *file* is supplied, then the returned *list* is an empty list.
.. method:: NNTP.list([file])
......@@ -169,9 +169,9 @@ indicates an error, the method raises one of the above exceptions.
not, and ``'m'`` if the newsgroup is moderated. (Note the ordering: *last*,
*first*.) If the *file* parameter is supplied, then the output of the ``LIST``
command is stored in a file. If *file* is a string, then the method will open
a file object with that name, write to it then close it. If *file* is a file
object, then it will start calling :meth:`write` on it to store the lines of the
command output. If *file* is supplied, then the returned *list* is an empty
a file with that name, write to it then close it. If *file* is a :term:`file
object`, then it will start calling :meth:`write` on it to store the lines of
the command output. If *file* is supplied, then the returned *list* is an empty
list.
......@@ -207,8 +207,8 @@ indicates an error, the method raises one of the above exceptions.
Send a ``HELP`` command. Return a pair ``(response, list)`` where *list* is a
list of help strings. If the *file* parameter is supplied, then the output of
the ``HELP`` command is stored in a file. If *file* is a string, then the
method will open a file object with that name, write to it then close it. If
*file* is a file object, then it will start calling :meth:`write` on it to store
method will open a file with that name, write to it then close it. If *file*
is a :term:`file object`, then it will start calling :meth:`write` on it to store
the lines of the command output. If *file* is supplied, then the returned *list*
is an empty list.
......@@ -243,8 +243,8 @@ indicates an error, the method raises one of the above exceptions.
Send a ``BODY`` command, where *id* has the same meaning as for :meth:`stat`.
If the *file* parameter is supplied, then the body is stored in a file. If
*file* is a string, then the method will open a file object with that name,
write to it then close it. If *file* is a file object, then it will start
*file* is a string, then the method will open a file with that name, write
to it then close it. If *file* is a :term:`file object`, then it will start
calling :meth:`write` on it to store the lines of the body. Return as for
:meth:`head`. If *file* is supplied, then the returned *list* is an empty list.
......@@ -270,9 +270,9 @@ indicates an error, the method raises one of the above exceptions.
text)``, where *id* is an article number (as a string) and *text* is the text of
the requested header for that article. If the *file* parameter is supplied, then
the output of the ``XHDR`` command is stored in a file. If *file* is a string,
then the method will open a file object with that name, write to it then close
it. If *file* is a file object, then it will start calling :meth:`write` on it
to store the lines of the command output. If *file* is supplied, then the
then the method will open a file with that name, write to it then close it.
If *file* is a :term:`file object`, then it will start calling :meth:`write` on
it to store the lines of the command output. If *file* is supplied, then the
returned *list* is an empty list.
......@@ -303,8 +303,8 @@ indicates an error, the method raises one of the above exceptions.
Process an ``XGTITLE`` command, returning a pair ``(response, list)``, where
*list* is a list of tuples containing ``(name, title)``. If the *file* parameter
is supplied, then the output of the ``XGTITLE`` command is stored in a file.
If *file* is a string, then the method will open a file object with that name,
write to it then close it. If *file* is a file object, then it will start
If *file* is a string, then the method will open a file with that name, write
to it then close it. If *file* is a :term:`file object`, then it will start
calling :meth:`write` on it to store the lines of the command output. If *file*
is supplied, then the returned *list* is an empty list. This is an optional NNTP
extension, and may not be supported by all servers.
......@@ -320,8 +320,8 @@ indicates an error, the method raises one of the above exceptions.
tuple is of the form ``(article number, subject, poster, date, id, references,
size, lines)``. If the *file* parameter is supplied, then the output of the
``XOVER`` command is stored in a file. If *file* is a string, then the method
will open a file object with that name, write to it then close it. If *file*
is a file object, then it will start calling :meth:`write` on it to store the
will open a file with that name, write to it then close it. If *file* is a
:term:`file object`, then it will start calling :meth:`write` on it to store the
lines of the command output. If *file* is supplied, then the returned *list* is
an empty list. This is an optional NNTP extension, and may not be supported by
all servers.
......
......@@ -401,7 +401,7 @@ process and user.
File Object Creation
--------------------
These functions create new file objects. (See also :func:`open`.)
These functions create new :term:`file objects <file object>`. (See also :func:`open`.)
.. function:: fdopen(fd[, mode[, bufsize]])
......@@ -436,6 +436,10 @@ process will then be assigned 3, 4, 5, and so forth. The name "file descriptor"
is slightly deceptive; on Unix platforms, sockets and pipes are also referenced
by file descriptors.
The :meth:`~file.fileno` method can be used to obtain the file descriptor
associated with a :term:`file object` when required. Note that using the file
descriptor directly will bypass the file object methods, ignoring aspects such
as internal buffering of data.
.. function:: close(fd)
......@@ -550,9 +554,9 @@ by file descriptors.
Force write of file with filedescriptor *fd* to disk. On Unix, this calls the
native :cfunc:`fsync` function; on Windows, the MS :cfunc:`_commit` function.
If you're starting with a Python file object *f*, first do ``f.flush()``, and
then do ``os.fsync(f.fileno())``, to ensure that all internal buffers associated
with *f* are written to disk.
If you're starting with a buffered Python :term:`file object` *f*, first do
``f.flush()``, and then do ``os.fsync(f.fileno())``, to ensure that all internal
buffers associated with *f* are written to disk.
Availability: Unix, and Windows.
......@@ -609,9 +613,9 @@ by file descriptors.
.. note::
This function is intended for low-level I/O. For normal usage, use the
built-in function :func:`open`, which returns a "file object" with
built-in function :func:`open`, which returns a :term:`file object` with
:meth:`~file.read` and :meth:`~file.wprite` methods (and many more). To
wrap a file descriptor in a "file object", use :func:`fdopen`.
wrap a file descriptor in a file object, use :func:`fdopen`.
.. function:: openpty()
......
......@@ -143,8 +143,8 @@ process more convenient:
.. function:: dump(obj, file[, protocol, \*, fix_imports=True])
Write a pickled representation of *obj* to the open file object *file*. This
is equivalent to ``Pickler(file, protocol).dump(obj)``.
Write a pickled representation of *obj* to the open :term:`file object` *file*.
This is equivalent to ``Pickler(file, protocol).dump(obj)``.
The optional *protocol* argument tells the pickler to use the given protocol;
supported protocols are 0, 1, 2, 3. The default protocol is 3; a
......@@ -155,8 +155,9 @@ process more convenient:
Python needed to read the pickle produced.
The *file* argument must have a write() method that accepts a single bytes
argument. It can thus be a file object opened for binary writing, a
io.BytesIO instance, or any other custom object that meets this interface.
argument. It can thus be an on-disk file opened for binary writing, a
:class:`io.BytesIO` instance, or any other custom object that meets this
interface.
If *fix_imports* is True and *protocol* is less than 3, pickle will try to
map the new Python 3.x names to the old module names used in Python 2.x,
......@@ -181,8 +182,8 @@ process more convenient:
.. function:: load(file, [\*, fix_imports=True, encoding="ASCII", errors="strict"])
Read a pickled object representation from the open file object *file* and
return the reconstituted object hierarchy specified therein. This is
Read a pickled object representation from the open :term:`file object` *file*
and return the reconstituted object hierarchy specified therein. This is
equivalent to ``Unpickler(file).load()``.
The protocol version of the pickle is detected automatically, so no protocol
......@@ -191,9 +192,9 @@ process more convenient:
The argument *file* must have two methods, a read() method that takes an
integer argument, and a readline() method that requires no arguments. Both
methods should return bytes. Thus *file* can be a binary file object opened
for reading, a BytesIO object, or any other custom object that meets this
interface.
methods should return bytes. Thus *file* can be an on-disk file opened
for binary reading, a :class:`io.BytesIO` object, or any other custom object
that meets this interface.
Optional keyword arguments are *fix_imports*, *encoding* and *errors*,
which are used to control compatiblity support for pickle stream generated
......@@ -260,8 +261,8 @@ The :mod:`pickle` module exports two classes, :class:`Pickler` and
Python needed to read the pickle produced.
The *file* argument must have a write() method that accepts a single bytes
argument. It can thus be a file object opened for binary writing, a
io.BytesIO instance, or any other custom object that meets this interface.
argument. It can thus be an on-disk file opened for binary writing, a
:class:`io.BytesIO` instance, or any other custom object that meets this interface.
If *fix_imports* is True and *protocol* is less than 3, pickle will try to
map the new Python 3.x names to the old module names used in Python 2.x,
......@@ -304,9 +305,9 @@ The :mod:`pickle` module exports two classes, :class:`Pickler` and
The argument *file* must have two methods, a read() method that takes an
integer argument, and a readline() method that requires no arguments. Both
methods should return bytes. Thus *file* can be a binary file object opened
for reading, a BytesIO object, or any other custom object that meets this
interface.
methods should return bytes. Thus *file* can be an on-disk file object opened
for binary reading, a :class:`io.BytesIO` object, or any other custom object
that meets this interface.
Optional keyword arguments are *fix_imports*, *encoding* and *errors*,
which are used to control compatiblity support for pickle stream generated
......
......@@ -22,23 +22,23 @@ sending a graphics file.
.. function:: decode(input, output[,header])
Decode the contents of the *input* file and write the resulting decoded binary
data to the *output* file. *input* and *output* must either be file objects or
objects that mimic the file object interface. *input* will be read until
``input.readline()`` returns an empty string. If the optional argument *header*
is present and true, underscore will be decoded as space. This is used to decode
"Q"-encoded headers as described in :rfc:`1522`: "MIME (Multipurpose Internet
Mail Extensions) Part Two: Message Header Extensions for Non-ASCII Text".
data to the *output* file. *input* and *output* must be :term:`file objects
<file object>`. *input* will be read until ``input.readline()`` returns an
empty string. If the optional argument *header* is present and true, underscore
will be decoded as space. This is used to decode "Q"-encoded headers as
described in :rfc:`1522`: "MIME (Multipurpose Internet Mail Extensions)
Part Two: Message Header Extensions for Non-ASCII Text".
.. function:: encode(input, output, quotetabs)
Encode the contents of the *input* file and write the resulting quoted-printable
data to the *output* file. *input* and *output* must either be file objects or
objects that mimic the file object interface. *input* will be read until
``input.readline()`` returns an empty string. *quotetabs* is a flag which
controls whether to encode embedded spaces and tabs; when true it encodes such
embedded whitespace, and when false it leaves them unencoded. Note that spaces
and tabs appearing at the end of lines are always encoded, as per :rfc:`1521`.
data to the *output* file. *input* and *output* must be :term:`file objects
<file object>`. *input* will be read until ``input.readline()`` returns an
empty string. *quotetabs* is a flag which controls whether to encode embedded
spaces and tabs; when true it encodes such embedded whitespace, and when
false it leaves them unencoded. Note that spaces and tabs appearing at the
end of lines are always encoded, as per :rfc:`1521`.
.. function:: decodestring(s[,header])
......
......@@ -79,11 +79,12 @@ The module defines the following:
single: socket() (in module socket)
single: popen() (in module os)
Among the acceptable object types in the sequences are Python file objects (e.g.
``sys.stdin``, or objects returned by :func:`open` or :func:`os.popen`), socket
objects returned by :func:`socket.socket`. You may also define a :dfn:`wrapper`
class yourself, as long as it has an appropriate :meth:`fileno` method (that
really returns a file descriptor, not just a random integer).
Among the acceptable object types in the sequences are Python :term:`file
objects <file object>` (e.g. ``sys.stdin``, or objects returned by
:func:`open` or :func:`os.popen`), socket objects returned by
:func:`socket.socket`. You may also define a :dfn:`wrapper` class yourself,
as long as it has an appropriate :meth:`fileno` method (that really returns
a file descriptor, not just a random integer).
.. note::
......
......@@ -592,7 +592,7 @@ correspond to Unix system calls applicable to sockets.
.. index:: single: I/O control; buffering
Return a :dfn:`file object` associated with the socket. The exact
Return a :term:`file object` associated with the socket. The exact
returned type depends on the arguments given to :meth:`makefile`. These
arguments are interpreted the same way as by the built-in :func:`open`
function.
......
......@@ -2210,9 +2210,9 @@ to be provided for a context manager object to define a runtime context:
the identifier in the :keyword:`as` clause of :keyword:`with` statements using
this context manager.
An example of a context manager that returns itself is a file object. File
objects return themselves from __enter__() to allow :func:`open` to be used as
the context expression in a :keyword:`with` statement.
An example of a context manager that returns itself is a :term:`file object`.
File objects return themselves from __enter__() to allow :func:`open` to be
used as the context expression in a :keyword:`with` statement.
An example of a context manager that returns a related object is the one
returned by :func:`decimal.localcontext`. These managers set the active
......
......@@ -107,9 +107,9 @@ This module defines one class called :class:`Popen`:
*stdin*, *stdout* and *stderr* specify the executed programs' standard input,
standard output and standard error file handles, respectively. Valid values
are :data:`PIPE`, an existing file descriptor (a positive integer), an
existing file object, and ``None``. :data:`PIPE` indicates that a new pipe
to the child should be created. With ``None``, no redirection will occur;
the child's file handles will be inherited from the parent. Additionally,
existing :term:`file object`, and ``None``. :data:`PIPE` indicates that a
new pipe to the child should be created. With ``None``, no redirection will
occur; the child's file handles will be inherited from the parent. Additionally,
*stderr* can be :data:`STDOUT`, which indicates that the stderr data from the
applications should be captured into the same file handle as for stdout.
......@@ -377,20 +377,20 @@ The following attributes are also available:
.. attribute:: Popen.stdin
If the *stdin* argument was :data:`PIPE`, this attribute is a file object
that provides input to the child process. Otherwise, it is ``None``.
If the *stdin* argument was :data:`PIPE`, this attribute is a :term:`file
object` that provides input to the child process. Otherwise, it is ``None``.
.. attribute:: Popen.stdout
If the *stdout* argument was :data:`PIPE`, this attribute is a file object
that provides output from the child process. Otherwise, it is ``None``.
If the *stdout* argument was :data:`PIPE`, this attribute is a :term:`file
object` that provides output from the child process. Otherwise, it is ``None``.
.. attribute:: Popen.stderr
If the *stderr* argument was :data:`PIPE`, this attribute is a file object
that provides error output from the child process. Otherwise, it is
If the *stderr* argument was :data:`PIPE`, this attribute is a :term:`file
object` that provides error output from the child process. Otherwise, it is
``None``.
......
......@@ -792,10 +792,10 @@ always available.
stdout
stderr
File objects corresponding to the interpreter's standard input, output and error
streams. ``stdin`` is used for all interpreter input except for scripts but
including calls to :func:`input`. ``stdout`` is used for
the output of :func:`print` and :term:`expression` statements and for the
:term:`File objects <file object>` corresponding to the interpreter's standard
input, output and error streams. ``stdin`` is used for all interpreter input
except for scripts but including calls to :func:`input`. ``stdout`` is used
for the output of :func:`print` and :term:`expression` statements and for the
prompts of :func:`input`. The interpreter's own prompts
and (almost all of) its error messages go to ``stderr``. ``stdout`` and
``stderr`` needn't be built-in file objects: any object is acceptable as long
......
......@@ -66,8 +66,8 @@ Some facts and figures:
*mode* ``'r'`` to avoid this. If a compression method is not supported,
:exc:`CompressionError` is raised.
If *fileobj* is specified, it is used as an alternative to a file object opened
for *name*. It is supposed to be at position 0.
If *fileobj* is specified, it is used as an alternative to a :term:`file object`
opened in binary mode for *name*. It is supposed to be at position 0.
For special purposes, there is a second format for *mode*:
``'filemode|[compression]'``. :func:`tarfile.open` will return a :class:`TarFile`
......@@ -75,7 +75,7 @@ Some facts and figures:
be done on the file. If given, *fileobj* may be any object that has a
:meth:`read` or :meth:`write` method (depending on the *mode*). *bufsize*
specifies the blocksize and defaults to ``20 * 512`` bytes. Use this variant
in combination with e.g. ``sys.stdin``, a socket file object or a tape
in combination with e.g. ``sys.stdin``, a socket :term:`file object` or a tape
device. However, such a :class:`TarFile` object is limited in that it does
not allow to be accessed randomly, see :ref:`tar-examples`. The currently
possible modes:
......@@ -344,9 +344,9 @@ object, see :ref:`tarinfo-objects` for details.
.. method:: TarFile.extractfile(member)
Extract a member from the archive as a file object. *member* may be a filename
or a :class:`TarInfo` object. If *member* is a regular file, a file-like object
is returned. If *member* is a link, a file-like object is constructed from the
link's target. If *member* is none of the above, :const:`None` is returned.
or a :class:`TarInfo` object. If *member* is a regular file, a :term:`file-like
object` is returned. If *member* is a link, a file-like object is constructed from
the link's target. If *member* is none of the above, :const:`None` is returned.
.. note::
......@@ -380,9 +380,9 @@ object, see :ref:`tarinfo-objects` for details.
.. method:: TarFile.gettarinfo(name=None, arcname=None, fileobj=None)
Create a :class:`TarInfo` object for either the file *name* or the file object
*fileobj* (using :func:`os.fstat` on its file descriptor). You can modify some
of the :class:`TarInfo`'s attributes before you add it using :meth:`addfile`.
Create a :class:`TarInfo` object for either the file *name* or the :term:`file
object` *fileobj* (using :func:`os.fstat` on its file descriptor). You can modify
some of the :class:`TarInfo`'s attributes before you add it using :meth:`addfile`.
If given, *arcname* specifies an alternative name for the file in the archive.
......
......@@ -29,7 +29,7 @@ The module defines the following user-callable functions:
.. function:: TemporaryFile(mode='w+b', buffering=None, encoding=None, newline=None, suffix='', prefix='tmp', dir=None)
Return a file-like object that can be used as a temporary storage area.
Return a :term:`file-like object` that can be used as a temporary storage area.
The file is created using :func:`mkstemp`. It will be destroyed as soon
as it is closed (including an implicit close when the object is garbage
collected). Under Unix, the directory entry for the file is removed
......
......@@ -17,7 +17,7 @@ I/O control (and then only if configured at installation time).
All functions in this module take a file descriptor *fd* as their first
argument. This can be an integer file descriptor, such as returned by
``sys.stdin.fileno()``, or a file object, such as ``sys.stdin`` itself.
``sys.stdin.fileno()``, or a :term:`file object`, such as ``sys.stdin`` itself.
This module also defines all the constants needed to work with the functions
provided here; these have the same name as their counterparts in C. Please
......
......@@ -58,8 +58,9 @@ is exposed by the :mod:`weakref` module for the benefit of advanced uses.
Not all objects can be weakly referenced; those objects which can include class
instances, functions written in Python (but not in C), instance methods, sets,
frozensets, file objects, :term:`generator`\s, type objects, sockets, arrays,
deques, and regular expression pattern objects.
frozensets, some :term:`file objects <file object>`, :term:`generator`\s, type
objects, sockets, arrays, deques and regular expression pattern objects.
Several built-in types such as :class:`list` and :class:`dict` do not directly
support weak references but can add support through subclassing::
......
......@@ -89,9 +89,10 @@ Functions
.. function:: iterparse(source, events=None)
Parses an XML section into an element tree incrementally, and reports what's
going on to the user. *source* is a filename or file object containing XML data.
*events* is a list of events to report back. If omitted, only "end" events are
reported. Returns an :term:`iterator` providing ``(event, elem)`` pairs.
going on to the user. *source* is a filename or :term:`file object` containing
XML data. *events* is a list of events to report back. If omitted, only "end"
events are reported. Returns an :term:`iterator` providing ``(event, elem)``
pairs.
.. note::
......@@ -359,16 +360,16 @@ ElementTree Objects
.. method:: parse(source, parser=None)
Loads an external XML section into this element tree. *source* is a file
name or file object. *parser* is an optional parser instance. If not
given, the standard XMLTreeBuilder parser is used. Returns the section
Loads an external XML section into this element tree. *source* is a file
name or :term:`file object`. *parser* is an optional parser instance.
If not given, the standard XMLTreeBuilder parser is used. Returns the section
root element.
.. method:: write(file, encoding=None)
Writes the element tree to a file, as XML. *file* is a file name, or a
file object opened for writing. *encoding* [1]_ is the output encoding
Writes the element tree to a file, as XML. *file* is a file name, or a
:term:`file object` opened for writing. *encoding* [1]_ is the output encoding
(default is US-ASCII).
This is the XML file that is going to be manipulated::
......
......@@ -781,9 +781,9 @@ I/O objects (also known as file objects)
single: stdout (in module sys)
single: stderr (in module sys)
A file object represents an open file. Various shortcuts are available
to create file objects: the :func:`open` built-in function, and also
:func:`os.popen`, :func:`os.fdopen`, and the :meth:`makefile` method
A :term:`file object` represents an open file. Various shortcuts are
available to create file objects: the :func:`open` built-in function, and
also :func:`os.popen`, :func:`os.fdopen`, and the :meth:`makefile` method
of socket objects (and perhaps by other functions or methods provided
by extension modules).
......
......@@ -232,8 +232,8 @@ Reading and Writing Files
builtin: open
object: file
:func:`open` returns a file object, and is most commonly used with two
arguments: ``open(filename, mode)``.
:func:`open` returns a :term:`file object`, and is most commonly used with
two arguments: ``open(filename, mode)``.
::
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment