blob: 417c3b1319c035d4239f9a972f4e52052f98b80f [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001.. _tut-io:
2
3****************
4Input and Output
5****************
6
7There are several ways to present the output of a program; data can be printed
8in a human-readable form, or written to a file for future use. This chapter will
9discuss some of the possibilities.
10
11
12.. _tut-formatting:
13
14Fancier Output Formatting
15=========================
16
17So far we've encountered two ways of writing values: *expression statements* and
Guido van Rossum0616b792007-08-31 03:25:11 +000018the :func:`print` function. (A third way is using the :meth:`write` method
Georg Brandl116aa622007-08-15 14:28:22 +000019of file objects; the standard output file can be referenced as ``sys.stdout``.
20See the Library Reference for more information on this.)
21
Georg Brandl116aa622007-08-15 14:28:22 +000022Often you'll want more control over the formatting of your output than simply
Miss Islington (bot)80a5f042018-07-09 06:52:48 -070023printing space-separated values. There are several ways to format output.
Benjamin Petersone6f00632008-05-26 01:03:56 +000024
Miss Islington (bot)80a5f042018-07-09 06:52:48 -070025* To use :ref:`formatted string literals <tut-f-strings>`, begin a string
26 with ``f`` or ``F`` before the opening quotation mark or triple quotation mark.
27 Inside this string, you can write a Python expression between ``{`` and ``}``
28 characters that can refer to variables or literal values.
Georg Brandl116aa622007-08-15 14:28:22 +000029
Miss Islington (bot)80a5f042018-07-09 06:52:48 -070030 ::
31
32 >>> year = 2016 ; event = 'Referendum'
33 >>> f'Results of the {year} {event}'
34 'Results of the 2016 Referendum'
35
36* The :meth:`str.format` method of strings requires more manual
37 effort. You'll still use ``{`` and ``}`` to mark where a variable
38 will be substituted and can provide detailed formatting directives,
39 but you'll also need to provide the information to be formatted.
40
41 ::
42
43 >>> yes_votes = 42_572_654 ; no_votes = 43_132_495
44 >>> percentage = (yes_votes/(yes_votes+no_votes)
45 >>> '{:-9} YES votes {:2.2%}'.format(yes_votes, percentage))
46 ' 42572654 YES votes 49.67%'
47
48* Finally, you can do all the string handling yourself by using string slicing and
49 concatenation operations to create any layout you can imagine. The
50 string type has some methods that perform useful operations for padding
51 strings to a given column width.
52
53When you don't need fancy output but just want a quick display of some
54variables for debugging purposes, you can convert any value to a string with
55the :func:`repr` or :func:`str` functions.
Georg Brandl116aa622007-08-15 14:28:22 +000056
57The :func:`str` function is meant to return representations of values which are
58fairly human-readable, while :func:`repr` is meant to generate representations
59which can be read by the interpreter (or will force a :exc:`SyntaxError` if
Sandro Tosia17ef142012-08-14 19:51:43 +020060there is no equivalent syntax). For objects which don't have a particular
Georg Brandl116aa622007-08-15 14:28:22 +000061representation for human consumption, :func:`str` will return the same value as
62:func:`repr`. Many values, such as numbers or structures like lists and
Ezio Melotti0def5c62011-03-13 02:27:26 +020063dictionaries, have the same representation using either function. Strings, in
64particular, have two distinct representations.
Georg Brandl116aa622007-08-15 14:28:22 +000065
66Some examples::
67
68 >>> s = 'Hello, world.'
69 >>> str(s)
70 'Hello, world.'
71 >>> repr(s)
72 "'Hello, world.'"
Ezio Melotti0def5c62011-03-13 02:27:26 +020073 >>> str(1/7)
Mark Dickinson5a55b612009-06-28 20:59:42 +000074 '0.14285714285714285'
Georg Brandl116aa622007-08-15 14:28:22 +000075 >>> x = 10 * 3.25
76 >>> y = 200 * 200
77 >>> s = 'The value of x is ' + repr(x) + ', and y is ' + repr(y) + '...'
Guido van Rossum0616b792007-08-31 03:25:11 +000078 >>> print(s)
Georg Brandl116aa622007-08-15 14:28:22 +000079 The value of x is 32.5, and y is 40000...
80 >>> # The repr() of a string adds string quotes and backslashes:
81 ... hello = 'hello, world\n'
82 >>> hellos = repr(hello)
Guido van Rossum0616b792007-08-31 03:25:11 +000083 >>> print(hellos)
Georg Brandl116aa622007-08-15 14:28:22 +000084 'hello, world\n'
85 >>> # The argument to repr() may be any Python object:
86 ... repr((x, y, ('spam', 'eggs')))
87 "(32.5, 40000, ('spam', 'eggs'))"
Georg Brandl116aa622007-08-15 14:28:22 +000088
Miss Islington (bot)80a5f042018-07-09 06:52:48 -070089The :mod:`string` module contains a :class:`~string.Template` class that offers
90yet another way to substitute values into strings, using placeholders like
91``$x`` and replacing them with values from a dictionary, but offers much less
92control of the formatting.
Georg Brandl116aa622007-08-15 14:28:22 +000093
Miss Islington (bot)80a5f042018-07-09 06:52:48 -070094
95.. _tut-f-strings:
96
97Formatted String Literals
98-------------------------
99
100:ref:`Formatted string literals <f-strings>` (also called f-strings for
101short) let you include the value of Python expressions inside a string by
102prefixing the string with ``f`` or ``F`` and writing expressions as
103``{expression}``.
104
105An optional format specifier can follow the expression. This allows greater
106control over how the value is formatted. The following example rounds pi to
107three places after the decimal::
108
109 >>> import math
110 >>> print(f'The value of pi is approximately {math.pi:.3f}.')
111
112Passing an integer after the ``':'`` will cause that field to be a minimum
113number of characters wide. This is useful for making columns line up. ::
114
115 >>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7678}
116 >>> for name, phone in table.items():
117 ... print(f'{name:10} ==> {phone:10d}')
Georg Brandl116aa622007-08-15 14:28:22 +0000118 ...
Miss Islington (bot)80a5f042018-07-09 06:52:48 -0700119 Sjoerd ==> 4127
120 Jack ==> 4098
121 Dcab ==> 7678
Georg Brandl116aa622007-08-15 14:28:22 +0000122
Miss Islington (bot)80a5f042018-07-09 06:52:48 -0700123Other modifiers can be used to convert the value before it is formatted.
124``'!a'`` applies :func:`ascii`, ``'!s'`` applies :func:`str`, and ``'!r'``
125applies :func:`repr`::
Georg Brandl116aa622007-08-15 14:28:22 +0000126
Miss Islington (bot)80a5f042018-07-09 06:52:48 -0700127 >>> animals = 'eels'
128 >>> print(f'My hovercraft is full of {animals}.')
129 My hovercraft is full of eels.
130 >>> print('My hovercraft is full of {animals !r}.')
131 My hovercraft is full of 'eels'.
Georg Brandl116aa622007-08-15 14:28:22 +0000132
Miss Islington (bot)80a5f042018-07-09 06:52:48 -0700133For a reference on these format specifications, see
134the reference guide for the :ref:`formatspec`.
Georg Brandl116aa622007-08-15 14:28:22 +0000135
Miss Islington (bot)80a5f042018-07-09 06:52:48 -0700136.. _tut-string-format:
Georg Brandl116aa622007-08-15 14:28:22 +0000137
Miss Islington (bot)80a5f042018-07-09 06:52:48 -0700138The String format() Method
139--------------------------
Georg Brandl116aa622007-08-15 14:28:22 +0000140
Benjamin Petersone6f00632008-05-26 01:03:56 +0000141Basic usage of the :meth:`str.format` method looks like this::
142
Georg Brandl2f3ed682009-09-01 07:42:40 +0000143 >>> print('We are the {} who say "{}!"'.format('knights', 'Ni'))
Benjamin Petersone6f00632008-05-26 01:03:56 +0000144 We are the knights who say "Ni!"
145
146The brackets and characters within them (called format fields) are replaced with
Ezio Melotti2b736602011-03-13 02:19:57 +0200147the objects passed into the :meth:`str.format` method. A number in the
Georg Brandl2f3ed682009-09-01 07:42:40 +0000148brackets can be used to refer to the position of the object passed into the
Ezio Melotti2b736602011-03-13 02:19:57 +0200149:meth:`str.format` method. ::
Benjamin Petersone6f00632008-05-26 01:03:56 +0000150
Benjamin Peterson0cea1572008-07-26 21:59:03 +0000151 >>> print('{0} and {1}'.format('spam', 'eggs'))
Benjamin Petersone6f00632008-05-26 01:03:56 +0000152 spam and eggs
Benjamin Peterson0cea1572008-07-26 21:59:03 +0000153 >>> print('{1} and {0}'.format('spam', 'eggs'))
Benjamin Petersone6f00632008-05-26 01:03:56 +0000154 eggs and spam
155
Ezio Melotti2b736602011-03-13 02:19:57 +0200156If keyword arguments are used in the :meth:`str.format` method, their values
Alexandre Vassalotti6d3dfc32009-07-29 19:54:39 +0000157are referred to by using the name of the argument. ::
Benjamin Petersone6f00632008-05-26 01:03:56 +0000158
Benjamin Peterson71141932008-07-26 22:27:04 +0000159 >>> print('This {food} is {adjective}.'.format(
160 ... food='spam', adjective='absolutely horrible'))
Benjamin Petersone6f00632008-05-26 01:03:56 +0000161 This spam is absolutely horrible.
162
163Positional and keyword arguments can be arbitrarily combined::
164
Benjamin Peterson71141932008-07-26 22:27:04 +0000165 >>> print('The story of {0}, {1}, and {other}.'.format('Bill', 'Manfred',
166 other='Georg'))
Benjamin Petersone6f00632008-05-26 01:03:56 +0000167 The story of Bill, Manfred, and Georg.
168
Georg Brandl116aa622007-08-15 14:28:22 +0000169If you have a really long format string that you don't want to split up, it
170would be nice if you could reference the variables to be formatted by name
Benjamin Petersone6f00632008-05-26 01:03:56 +0000171instead of by position. This can be done by simply passing the dict and using
172square brackets ``'[]'`` to access the keys ::
Georg Brandl116aa622007-08-15 14:28:22 +0000173
174 >>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
Benjamin Peterson71141932008-07-26 22:27:04 +0000175 >>> print('Jack: {0[Jack]:d}; Sjoerd: {0[Sjoerd]:d}; '
Andrew Svetlove9cf97c2012-10-17 16:41:28 +0300176 ... 'Dcab: {0[Dcab]:d}'.format(table))
Benjamin Petersone6f00632008-05-26 01:03:56 +0000177 Jack: 4098; Sjoerd: 4127; Dcab: 8637678
178
179This could also be done by passing the table as keyword arguments with the '**'
Alexandre Vassalotti6d3dfc32009-07-29 19:54:39 +0000180notation. ::
Benjamin Petersone6f00632008-05-26 01:03:56 +0000181
182 >>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
183 >>> print('Jack: {Jack:d}; Sjoerd: {Sjoerd:d}; Dcab: {Dcab:d}'.format(**table))
Georg Brandl116aa622007-08-15 14:28:22 +0000184 Jack: 4098; Sjoerd: 4127; Dcab: 8637678
185
Ezio Melotti2b736602011-03-13 02:19:57 +0200186This is particularly useful in combination with the built-in function
187:func:`vars`, which returns a dictionary containing all local variables.
Georg Brandl116aa622007-08-15 14:28:22 +0000188
Miss Islington (bot)80a5f042018-07-09 06:52:48 -0700189As an example, the following lines produce a tidily-aligned
190set of columns giving integers and their squares and cubes::
191
192 >>> for x in range(1, 11):
193 ... print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x))
194 ...
195 1 1 1
196 2 4 8
197 3 9 27
198 4 16 64
199 5 25 125
200 6 36 216
201 7 49 343
202 8 64 512
203 9 81 729
204 10 100 1000
205
Mark Dickinson934896d2009-02-21 20:59:32 +0000206For a complete overview of string formatting with :meth:`str.format`, see
Benjamin Petersone6f00632008-05-26 01:03:56 +0000207:ref:`formatstrings`.
208
209
Miss Islington (bot)80a5f042018-07-09 06:52:48 -0700210Manual String Formatting
211------------------------
212
213Here's the same table of squares and cubes, formatted manually::
214
215 >>> for x in range(1, 11):
216 ... print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ')
217 ... # Note use of 'end' on previous line
218 ... print(repr(x*x*x).rjust(4))
219 ...
220 1 1 1
221 2 4 8
222 3 9 27
223 4 16 64
224 5 25 125
225 6 36 216
226 7 49 343
227 8 64 512
228 9 81 729
229 10 100 1000
230
231(Note that the one space between each column was added by the
232way :func:`print` works: it always adds spaces between its arguments.)
233
234The :meth:`str.rjust` method of string objects right-justifies a string in a
235field of a given width by padding it with spaces on the left. There are
236similar methods :meth:`str.ljust` and :meth:`str.center`. These methods do
237not write anything, they just return a new string. If the input string is too
238long, they don't truncate it, but return it unchanged; this will mess up your
239column lay-out but that's usually better than the alternative, which would be
240lying about a value. (If you really want truncation you can always add a
241slice operation, as in ``x.ljust(n)[:n]``.)
242
243There is another method, :meth:`str.zfill`, which pads a numeric string on the
244left with zeros. It understands about plus and minus signs::
245
246 >>> '12'.zfill(5)
247 '00012'
248 >>> '-3.14'.zfill(7)
249 '-003.14'
250 >>> '3.14159265359'.zfill(5)
251 '3.14159265359'
252
253
Benjamin Petersone6f00632008-05-26 01:03:56 +0000254Old string formatting
255---------------------
256
257The ``%`` operator can also be used for string formatting. It interprets the
Georg Brandl60203b42010-10-06 10:11:56 +0000258left argument much like a :c:func:`sprintf`\ -style format string to be applied
Benjamin Petersone6f00632008-05-26 01:03:56 +0000259to the right argument, and returns the string resulting from this formatting
260operation. For example::
261
262 >>> import math
Miss Islington (bot)80a5f042018-07-09 06:52:48 -0700263 >>> print('The value of pi is approximately %5.3f.' % math.pi)
264 The value of pi is approximately 3.142.
Benjamin Petersone6f00632008-05-26 01:03:56 +0000265
Benjamin Petersone6f00632008-05-26 01:03:56 +0000266More information can be found in the :ref:`old-string-formatting` section.
267
Georg Brandl116aa622007-08-15 14:28:22 +0000268
269.. _tut-files:
270
271Reading and Writing Files
272=========================
273
274.. index::
275 builtin: open
276 object: file
277
Antoine Pitrou11cb9612010-09-15 11:11:28 +0000278:func:`open` returns a :term:`file object`, and is most commonly used with
279two arguments: ``open(filename, mode)``.
Georg Brandl116aa622007-08-15 14:28:22 +0000280
Georg Brandl116aa622007-08-15 14:28:22 +0000281::
282
Petri Lehtinen9f74c6c2013-02-23 19:26:56 +0100283 >>> f = open('workfile', 'w')
Georg Brandl0dcb7ac2008-08-08 07:04:38 +0000284
285.. XXX str(f) is <io.TextIOWrapper object at 0x82e8dc4>
286
Guido van Rossum0616b792007-08-31 03:25:11 +0000287 >>> print(f)
Petri Lehtinen9f74c6c2013-02-23 19:26:56 +0100288 <open file 'workfile', mode 'w' at 80a0960>
Georg Brandl116aa622007-08-15 14:28:22 +0000289
290The first argument is a string containing the filename. The second argument is
291another string containing a few characters describing the way in which the file
292will be used. *mode* can be ``'r'`` when the file will only be read, ``'w'``
293for only writing (an existing file with the same name will be erased), and
294``'a'`` opens the file for appending; any data written to the file is
295automatically added to the end. ``'r+'`` opens the file for both reading and
296writing. The *mode* argument is optional; ``'r'`` will be assumed if it's
297omitted.
298
Georg Brandl0dcb7ac2008-08-08 07:04:38 +0000299Normally, files are opened in :dfn:`text mode`, that means, you read and write
Alessandro Cuccid8de44b2015-07-28 21:00:10 +0200300strings from and to the file, which are encoded in a specific encoding. If
Jason R. Coombs842c0742015-07-29 14:04:36 -0400301encoding is not specified, the default is platform dependent (see
302:func:`open`). ``'b'`` appended to the mode opens the file in
Georg Brandl0dcb7ac2008-08-08 07:04:38 +0000303:dfn:`binary mode`: now the data is read and written in the form of bytes
304objects. This mode should be used for all files that don't contain text.
Skip Montanaro4e02c502007-09-26 01:10:12 +0000305
Chris Jerdonek5bf7f1f2012-10-17 20:17:41 -0700306In text mode, the default when reading is to convert platform-specific line
307endings (``\n`` on Unix, ``\r\n`` on Windows) to just ``\n``. When writing in
308text mode, the default is to convert occurrences of ``\n`` back to
309platform-specific line endings. This behind-the-scenes modification
Georg Brandl0dcb7ac2008-08-08 07:04:38 +0000310to file data is fine for text files, but will corrupt binary data like that in
311:file:`JPEG` or :file:`EXE` files. Be very careful to use binary mode when
312reading and writing such files.
Georg Brandl116aa622007-08-15 14:28:22 +0000313
Andrew Kuchlingbd4e9e02017-06-13 01:31:01 -0400314It is good practice to use the :keyword:`with` keyword when dealing
315with file objects. The advantage is that the file is properly closed
316after its suite finishes, even if an exception is raised at some
317point. Using :keyword:`with` is also much shorter than writing
318equivalent :keyword:`try`\ -\ :keyword:`finally` blocks::
319
320 >>> with open('workfile') as f:
321 ... read_data = f.read()
322 >>> f.closed
323 True
324
325If you're not using the :keyword:`with` keyword, then you should call
326``f.close()`` to close the file and immediately free up any system
327resources used by it. If you don't explicitly close a file, Python's
328garbage collector will eventually destroy the object and close the
329open file for you, but the file may stay open for a while. Another
330risk is that different Python implementations will do this clean-up at
331different times.
332
333After a file object is closed, either by a :keyword:`with` statement
334or by calling ``f.close()``, attempts to use the file object will
335automatically fail. ::
336
337 >>> f.close()
338 >>> f.read()
339 Traceback (most recent call last):
340 File "<stdin>", line 1, in <module>
Miss Islington (bot)c87b1aa2018-07-10 17:51:03 -0700341 ValueError: I/O operation on closed file.
Andrew Kuchlingbd4e9e02017-06-13 01:31:01 -0400342
Georg Brandl116aa622007-08-15 14:28:22 +0000343
344.. _tut-filemethods:
345
346Methods of File Objects
347-----------------------
348
349The rest of the examples in this section will assume that a file object called
350``f`` has already been created.
351
352To read a file's contents, call ``f.read(size)``, which reads some quantity of
Ezio Melotti397bb242016-01-12 11:27:30 +0200353data and returns it as a string (in text mode) or bytes object (in binary mode).
354*size* is an optional numeric argument. When *size* is omitted or negative, the
355entire contents of the file will be read and returned; it's your problem if the
356file is twice as large as your machine's memory. Otherwise, at most *size* bytes
357are read and returned.
Georg Brandl0dcb7ac2008-08-08 07:04:38 +0000358If the end of the file has been reached, ``f.read()`` will return an empty
359string (``''``). ::
Georg Brandl116aa622007-08-15 14:28:22 +0000360
361 >>> f.read()
362 'This is the entire file.\n'
363 >>> f.read()
364 ''
365
366``f.readline()`` reads a single line from the file; a newline character (``\n``)
367is left at the end of the string, and is only omitted on the last line of the
368file if the file doesn't end in a newline. This makes the return value
369unambiguous; if ``f.readline()`` returns an empty string, the end of the file
370has been reached, while a blank line is represented by ``'\n'``, a string
Georg Brandl0dcb7ac2008-08-08 07:04:38 +0000371containing only a single newline. ::
Georg Brandl116aa622007-08-15 14:28:22 +0000372
373 >>> f.readline()
374 'This is the first line of the file.\n'
375 >>> f.readline()
376 'Second line of the file\n'
377 >>> f.readline()
378 ''
379
Ezio Melottied3cd7e2013-04-15 19:08:31 +0300380For reading lines from a file, you can loop over the file object. This is memory
381efficient, fast, and leads to simple code::
Georg Brandl116aa622007-08-15 14:28:22 +0000382
383 >>> for line in f:
Georg Brandl0dcb7ac2008-08-08 07:04:38 +0000384 ... print(line, end='')
385 ...
Georg Brandl116aa622007-08-15 14:28:22 +0000386 This is the first line of the file.
387 Second line of the file
388
Ezio Melottied3cd7e2013-04-15 19:08:31 +0300389If you want to read all the lines of a file in a list you can also use
390``list(f)`` or ``f.readlines()``.
Georg Brandl116aa622007-08-15 14:28:22 +0000391
392``f.write(string)`` writes the contents of *string* to the file, returning
Georg Brandl0dcb7ac2008-08-08 07:04:38 +0000393the number of characters written. ::
Georg Brandl116aa622007-08-15 14:28:22 +0000394
395 >>> f.write('This is a test\n')
Georg Brandl0dcb7ac2008-08-08 07:04:38 +0000396 15
Georg Brandl116aa622007-08-15 14:28:22 +0000397
Ezio Melotti397bb242016-01-12 11:27:30 +0200398Other types of objects need to be converted -- either to a string (in text mode)
399or a bytes object (in binary mode) -- before writing them::
Georg Brandl116aa622007-08-15 14:28:22 +0000400
401 >>> value = ('the answer', 42)
Ezio Melotti397bb242016-01-12 11:27:30 +0200402 >>> s = str(value) # convert the tuple to string
Georg Brandl116aa622007-08-15 14:28:22 +0000403 >>> f.write(s)
Georg Brandl0dcb7ac2008-08-08 07:04:38 +0000404 18
Georg Brandl116aa622007-08-15 14:28:22 +0000405
R David Murray1c4e4432013-07-30 15:51:57 -0400406``f.tell()`` returns an integer giving the file object's current position in the file
Georg Brandl6b4c8472014-10-30 22:26:26 +0100407represented as number of bytes from the beginning of the file when in binary mode and
408an opaque number when in text mode.
R David Murray1c4e4432013-07-30 15:51:57 -0400409
410To change the file object's position, use ``f.seek(offset, from_what)``. The position is computed
Georg Brandl116aa622007-08-15 14:28:22 +0000411from adding *offset* to a reference point; the reference point is selected by
412the *from_what* argument. A *from_what* value of 0 measures from the beginning
413of the file, 1 uses the current file position, and 2 uses the end of the file as
414the reference point. *from_what* can be omitted and defaults to 0, using the
415beginning of the file as the reference point. ::
416
Petri Lehtinen9f74c6c2013-02-23 19:26:56 +0100417 >>> f = open('workfile', 'rb+')
Georg Brandl0dcb7ac2008-08-08 07:04:38 +0000418 >>> f.write(b'0123456789abcdef')
419 16
Serhiy Storchakadba90392016-05-10 12:01:23 +0300420 >>> f.seek(5) # Go to the 6th byte in the file
Georg Brandl0dcb7ac2008-08-08 07:04:38 +0000421 5
Georg Brandl48310cd2009-01-03 21:18:54 +0000422 >>> f.read(1)
Georg Brandl0dcb7ac2008-08-08 07:04:38 +0000423 b'5'
Serhiy Storchakadba90392016-05-10 12:01:23 +0300424 >>> f.seek(-3, 2) # Go to the 3rd byte before the end
Georg Brandl0dcb7ac2008-08-08 07:04:38 +0000425 13
Georg Brandl116aa622007-08-15 14:28:22 +0000426 >>> f.read(1)
Georg Brandl0dcb7ac2008-08-08 07:04:38 +0000427 b'd'
Georg Brandl116aa622007-08-15 14:28:22 +0000428
Georg Brandl0dcb7ac2008-08-08 07:04:38 +0000429In text files (those opened without a ``b`` in the mode string), only seeks
430relative to the beginning of the file are allowed (the exception being seeking
R David Murray1c4e4432013-07-30 15:51:57 -0400431to the very file end with ``seek(0, 2)``) and the only valid *offset* values are
432those returned from the ``f.tell()``, or zero. Any other *offset* value produces
433undefined behaviour.
434
Alexandre Vassalotti6d3dfc32009-07-29 19:54:39 +0000435File objects have some additional methods, such as :meth:`~file.isatty` and
436:meth:`~file.truncate` which are less frequently used; consult the Library
437Reference for a complete guide to file objects.
Georg Brandl116aa622007-08-15 14:28:22 +0000438
439
Antoine Pitroudd799d22013-12-05 23:46:32 +0100440.. _tut-json:
Georg Brandl116aa622007-08-15 14:28:22 +0000441
Antoine Pitroudd799d22013-12-05 23:46:32 +0100442Saving structured data with :mod:`json`
443---------------------------------------
Georg Brandl116aa622007-08-15 14:28:22 +0000444
Antoine Pitroudd799d22013-12-05 23:46:32 +0100445.. index:: module: json
Georg Brandl116aa622007-08-15 14:28:22 +0000446
Antoine Pitroudd799d22013-12-05 23:46:32 +0100447Strings can easily be written to and read from a file. Numbers take a bit more
Georg Brandl116aa622007-08-15 14:28:22 +0000448effort, since the :meth:`read` method only returns strings, which will have to
449be passed to a function like :func:`int`, which takes a string like ``'123'``
Antoine Pitroudd799d22013-12-05 23:46:32 +0100450and returns its numeric value 123. When you want to save more complex data
451types like nested lists and dictionaries, parsing and serializing by hand
452becomes complicated.
Georg Brandl116aa622007-08-15 14:28:22 +0000453
Antoine Pitroudd799d22013-12-05 23:46:32 +0100454Rather than having users constantly writing and debugging code to save
455complicated data types to files, Python allows you to use the popular data
456interchange format called `JSON (JavaScript Object Notation)
457<http://json.org>`_. The standard module called :mod:`json` can take Python
458data hierarchies, and convert them to string representations; this process is
459called :dfn:`serializing`. Reconstructing the data from the string representation
460is called :dfn:`deserializing`. Between serializing and deserializing, the
461string representing the object may have been stored in a file or data, or
Georg Brandl116aa622007-08-15 14:28:22 +0000462sent over a network connection to some distant machine.
463
Antoine Pitroudd799d22013-12-05 23:46:32 +0100464.. note::
465 The JSON format is commonly used by modern applications to allow for data
466 exchange. Many programmers are already familiar with it, which makes
467 it a good choice for interoperability.
Georg Brandl116aa622007-08-15 14:28:22 +0000468
Antoine Pitroudd799d22013-12-05 23:46:32 +0100469If you have an object ``x``, you can view its JSON string representation with a
470simple line of code::
Georg Brandl116aa622007-08-15 14:28:22 +0000471
suketa1dbce042017-06-12 10:42:59 +0900472 >>> import json
Antoine Pitroudd799d22013-12-05 23:46:32 +0100473 >>> json.dumps([1, 'simple', 'list'])
474 '[1, "simple", "list"]'
Georg Brandl116aa622007-08-15 14:28:22 +0000475
Antoine Pitroudd799d22013-12-05 23:46:32 +0100476Another variant of the :func:`~json.dumps` function, called :func:`~json.dump`,
477simply serializes the object to a :term:`text file`. So if ``f`` is a
478:term:`text file` object opened for writing, we can do this::
Georg Brandl116aa622007-08-15 14:28:22 +0000479
Antoine Pitroudd799d22013-12-05 23:46:32 +0100480 json.dump(x, f)
Georg Brandl116aa622007-08-15 14:28:22 +0000481
Antoine Pitroudd799d22013-12-05 23:46:32 +0100482To decode the object again, if ``f`` is a :term:`text file` object which has
483been opened for reading::
Georg Brandl116aa622007-08-15 14:28:22 +0000484
Antoine Pitroudd799d22013-12-05 23:46:32 +0100485 x = json.load(f)
486
487This simple serialization technique can handle lists and dictionaries, but
488serializing arbitrary class instances in JSON requires a bit of extra effort.
489The reference for the :mod:`json` module contains an explanation of this.
490
491.. seealso::
492
493 :mod:`pickle` - the pickle module
494
495 Contrary to :ref:`JSON <tut-json>`, *pickle* is a protocol which allows
496 the serialization of arbitrarily complex Python objects. As such, it is
497 specific to Python and cannot be used to communicate with applications
498 written in other languages. It is also insecure by default:
499 deserializing pickle data coming from an untrusted source can execute
500 arbitrary code, if the data was crafted by a skilled attacker.