blob: e1290d4c9b5c83bd660013c7fcc6d6f39215e42d [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`csv` --- CSV File Reading and Writing
2===========================================
3
4.. module:: csv
5 :synopsis: Write and read tabular data to and from delimited files.
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04006
Georg Brandl116aa622007-08-15 14:28:22 +00007.. sectionauthor:: Skip Montanaro <skip@pobox.com>
8
Andrew Kuchling2e3743c2014-03-19 16:23:01 -04009**Source code:** :source:`Lib/csv.py`
Georg Brandl116aa622007-08-15 14:28:22 +000010
Georg Brandl116aa622007-08-15 14:28:22 +000011.. index::
12 single: csv
13 pair: data; tabular
14
Terry Jan Reedyfa089b92016-06-11 15:02:54 -040015--------------
16
Georg Brandl116aa622007-08-15 14:28:22 +000017The so-called CSV (Comma Separated Values) format is the most common import and
Skip Montanarob40dea72011-03-19 09:09:30 -050018export format for spreadsheets and databases. CSV format was used for many
19years prior to attempts to describe the format in a standardized way in
20:rfc:`4180`. The lack of a well-defined standard means that subtle differences
21often exist in the data produced and consumed by different applications. These
22differences can make it annoying to process CSV files from multiple sources.
23Still, while the delimiters and quoting characters vary, the overall format is
24similar enough that it is possible to write a single module which can
25efficiently manipulate such data, hiding the details of reading and writing the
26data from the programmer.
Georg Brandl116aa622007-08-15 14:28:22 +000027
28The :mod:`csv` module implements classes to read and write tabular data in CSV
29format. It allows programmers to say, "write this data in the format preferred
30by Excel," or "read data from this file which was generated by Excel," without
31knowing the precise details of the CSV format used by Excel. Programmers can
32also describe the CSV formats understood by other applications or define their
33own special-purpose CSV formats.
34
35The :mod:`csv` module's :class:`reader` and :class:`writer` objects read and
36write sequences. Programmers can also read and write data in dictionary form
37using the :class:`DictReader` and :class:`DictWriter` classes.
38
Georg Brandl116aa622007-08-15 14:28:22 +000039.. seealso::
40
Georg Brandl116aa622007-08-15 14:28:22 +000041 :pep:`305` - CSV File API
42 The Python Enhancement Proposal which proposed this addition to Python.
43
44
45.. _csv-contents:
46
47Module Contents
48---------------
49
50The :mod:`csv` module defines the following functions:
51
52
R David Murray1b00f252012-08-15 10:43:58 -040053.. index::
54 single: universal newlines; csv.reader function
55
Georg Brandlc2a4f4f2009-04-10 09:03:43 +000056.. function:: reader(csvfile, dialect='excel', **fmtparams)
Georg Brandl116aa622007-08-15 14:28:22 +000057
58 Return a reader object which will iterate over lines in the given *csvfile*.
Georg Brandl9afde1c2007-11-01 20:32:30 +000059 *csvfile* can be any object which supports the :term:`iterator` protocol and returns a
Georg Brandlb30f3302011-01-06 09:23:56 +000060 string each time its :meth:`!__next__` method is called --- :term:`file objects
Antoine Pitrou11cb9612010-09-15 11:11:28 +000061 <file object>` and list objects are both suitable. If *csvfile* is a file object,
R David Murray91887022011-03-19 22:30:14 -040062 it should be opened with ``newline=''``. [1]_ An optional
Georg Brandl116aa622007-08-15 14:28:22 +000063 *dialect* parameter can be given which is used to define a set of parameters
64 specific to a particular CSV dialect. It may be an instance of a subclass of
65 the :class:`Dialect` class or one of the strings returned by the
Georg Brandlc2a4f4f2009-04-10 09:03:43 +000066 :func:`list_dialects` function. The other optional *fmtparams* keyword arguments
Georg Brandl116aa622007-08-15 14:28:22 +000067 can be given to override individual formatting parameters in the current
68 dialect. For full details about the dialect and formatting parameters, see
69 section :ref:`csv-fmt-params`.
70
Skip Montanaro0468df32009-03-25 00:52:18 +000071 Each row read from the csv file is returned as a list of strings. No
R. David Murray8b7d4aa2009-04-04 01:38:38 +000072 automatic data type conversion is performed unless the ``QUOTE_NONNUMERIC`` format
73 option is specified (in which case unquoted fields are transformed into floats).
Georg Brandl116aa622007-08-15 14:28:22 +000074
Christian Heimesb9eccbf2007-12-05 20:18:38 +000075 A short usage example::
Georg Brandl48310cd2009-01-03 21:18:54 +000076
Christian Heimesb9eccbf2007-12-05 20:18:38 +000077 >>> import csv
Ezio Melottie34f8a92012-09-15 05:51:45 +030078 >>> with open('eggs.csv', newline='') as csvfile:
79 ... spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
80 ... for row in spamreader:
81 ... print(', '.join(row))
Christian Heimesb9eccbf2007-12-05 20:18:38 +000082 Spam, Spam, Spam, Spam, Spam, Baked Beans
83 Spam, Lovely Spam, Wonderful Spam
84
Georg Brandl116aa622007-08-15 14:28:22 +000085
Georg Brandlc2a4f4f2009-04-10 09:03:43 +000086.. function:: writer(csvfile, dialect='excel', **fmtparams)
Georg Brandl116aa622007-08-15 14:28:22 +000087
88 Return a writer object responsible for converting the user's data into delimited
89 strings on the given file-like object. *csvfile* can be any object with a
R David Murray9c0d5ea2011-03-20 11:18:21 -040090 :func:`write` method. If *csvfile* is a file object, it should be opened with
91 ``newline=''`` [1]_. An optional *dialect*
Georg Brandl116aa622007-08-15 14:28:22 +000092 parameter can be given which is used to define a set of parameters specific to a
93 particular CSV dialect. It may be an instance of a subclass of the
94 :class:`Dialect` class or one of the strings returned by the
Georg Brandlc2a4f4f2009-04-10 09:03:43 +000095 :func:`list_dialects` function. The other optional *fmtparams* keyword arguments
Georg Brandl116aa622007-08-15 14:28:22 +000096 can be given to override individual formatting parameters in the current
97 dialect. For full details about the dialect and formatting parameters, see
98 section :ref:`csv-fmt-params`. To make it
99 as easy as possible to interface with modules which implement the DB API, the
100 value :const:`None` is written as the empty string. While this isn't a
101 reversible transformation, it makes it easier to dump SQL NULL data values to
102 CSV files without preprocessing the data returned from a ``cursor.fetch*`` call.
103 All other non-string data are stringified with :func:`str` before being written.
104
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000105 A short usage example::
106
Ezio Melottie34f8a92012-09-15 05:51:45 +0300107 import csv
108 with open('eggs.csv', 'w', newline='') as csvfile:
109 spamwriter = csv.writer(csvfile, delimiter=' ',
110 quotechar='|', quoting=csv.QUOTE_MINIMAL)
111 spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
112 spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000113
Georg Brandl116aa622007-08-15 14:28:22 +0000114
Berker Peksag12b50ce2015-06-05 15:17:51 +0300115.. function:: register_dialect(name[, dialect[, **fmtparams]])
Georg Brandl116aa622007-08-15 14:28:22 +0000116
Georg Brandlf6945182008-02-01 11:56:49 +0000117 Associate *dialect* with *name*. *name* must be a string. The
Georg Brandl116aa622007-08-15 14:28:22 +0000118 dialect can be specified either by passing a sub-class of :class:`Dialect`, or
Georg Brandlc2a4f4f2009-04-10 09:03:43 +0000119 by *fmtparams* keyword arguments, or both, with keyword arguments overriding
Georg Brandl116aa622007-08-15 14:28:22 +0000120 parameters of the dialect. For full details about the dialect and formatting
121 parameters, see section :ref:`csv-fmt-params`.
122
123
124.. function:: unregister_dialect(name)
125
126 Delete the dialect associated with *name* from the dialect registry. An
127 :exc:`Error` is raised if *name* is not a registered dialect name.
128
129
130.. function:: get_dialect(name)
131
Georg Brandl6554cb92007-12-02 23:15:43 +0000132 Return the dialect associated with *name*. An :exc:`Error` is raised if
133 *name* is not a registered dialect name. This function returns an immutable
134 :class:`Dialect`.
Georg Brandl116aa622007-08-15 14:28:22 +0000135
136.. function:: list_dialects()
137
138 Return the names of all registered dialects.
139
140
141.. function:: field_size_limit([new_limit])
142
143 Returns the current maximum field size allowed by the parser. If *new_limit* is
144 given, this becomes the new limit.
145
Georg Brandl116aa622007-08-15 14:28:22 +0000146
147The :mod:`csv` module defines the following classes:
148
Berker Peksag631ada82017-01-07 09:32:56 +0300149.. class:: DictReader(f, fieldnames=None, restkey=None, restval=None, \
R David Murrayf031a6f2014-02-24 15:32:54 -0500150 dialect='excel', *args, **kwds)
Georg Brandl116aa622007-08-15 14:28:22 +0000151
Raymond Hettinger43ca4522016-08-30 12:35:50 -0700152 Create an object that operates like a regular reader but maps the
153 information in each row to an :mod:`OrderedDict <collections.OrderedDict>`
154 whose keys are given by the optional *fieldnames* parameter.
155
156 The *fieldnames* parameter is a :term:`sequence`. If *fieldnames* is
Berker Peksag631ada82017-01-07 09:32:56 +0300157 omitted, the values in the first row of file *f* will be used as the
Raymond Hettinger43ca4522016-08-30 12:35:50 -0700158 fieldnames. Regardless of how the fieldnames are determined, the ordered
159 dictionary preserves their original ordering.
160
161 If a row has more fields than fieldnames, the remaining data is put in a
162 list and stored with the fieldname specified by *restkey* (which defaults
163 to ``None``). If a non-blank row has fewer fields than fieldnames, the
164 missing values are filled-in with ``None``.
165
166 All other optional or keyword arguments are passed to the underlying
167 :class:`reader` instance.
168
169 .. versionchanged:: 3.6
170 Returned rows are now of type :class:`OrderedDict`.
Georg Brandl116aa622007-08-15 14:28:22 +0000171
Berker Peksagc8c64e32014-11-24 23:46:30 +0200172 A short usage example::
173
174 >>> import csv
Ammar Askar275d2d92017-10-26 04:27:46 -0400175 >>> with open('names.csv', newline='') as csvfile:
Berker Peksagc8c64e32014-11-24 23:46:30 +0200176 ... reader = csv.DictReader(csvfile)
177 ... for row in reader:
178 ... print(row['first_name'], row['last_name'])
179 ...
Raymond Hettinger43ca4522016-08-30 12:35:50 -0700180 Eric Idle
181 John Cleese
182
183 >>> print(row)
184 OrderedDict([('first_name', 'John'), ('last_name', 'Cleese')])
Berker Peksagc8c64e32014-11-24 23:46:30 +0200185
Georg Brandl116aa622007-08-15 14:28:22 +0000186
Berker Peksag631ada82017-01-07 09:32:56 +0300187.. class:: DictWriter(f, fieldnames, restval='', extrasaction='raise', \
R David Murrayf031a6f2014-02-24 15:32:54 -0500188 dialect='excel', *args, **kwds)
Georg Brandl116aa622007-08-15 14:28:22 +0000189
R David Murrayf031a6f2014-02-24 15:32:54 -0500190 Create an object which operates like a regular writer but maps dictionaries
191 onto output rows. The *fieldnames* parameter is a :mod:`sequence
192 <collections.abc>` of keys that identify the order in which values in the
Berker Peksag631ada82017-01-07 09:32:56 +0300193 dictionary passed to the :meth:`writerow` method are written to file
194 *f*. The optional *restval* parameter specifies the value to be
R David Murrayf031a6f2014-02-24 15:32:54 -0500195 written if the dictionary is missing a key in *fieldnames*. If the
196 dictionary passed to the :meth:`writerow` method contains a key not found in
197 *fieldnames*, the optional *extrasaction* parameter indicates what action to
INADA Naoki0a421a22016-10-21 19:47:57 +0900198 take.
199 If it is set to ``'raise'``, the default value, a :exc:`ValueError`
200 is raised.
201 If it is set to ``'ignore'``, extra values in the dictionary are ignored.
202 Any other optional or keyword arguments are passed to the underlying
203 :class:`writer` instance.
Georg Brandl116aa622007-08-15 14:28:22 +0000204
R David Murrayf031a6f2014-02-24 15:32:54 -0500205 Note that unlike the :class:`DictReader` class, the *fieldnames* parameter
206 of the :class:`DictWriter` is not optional. Since Python's :class:`dict`
207 objects are not ordered, there is not enough information available to deduce
Berker Peksag631ada82017-01-07 09:32:56 +0300208 the order in which the row should be written to file *f*.
Georg Brandl116aa622007-08-15 14:28:22 +0000209
Berker Peksagc8c64e32014-11-24 23:46:30 +0200210 A short usage example::
211
212 import csv
213
Ammar Askar275d2d92017-10-26 04:27:46 -0400214 with open('names.csv', 'w', newline='') as csvfile:
Berker Peksagc8c64e32014-11-24 23:46:30 +0200215 fieldnames = ['first_name', 'last_name']
216 writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
217
218 writer.writeheader()
219 writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
220 writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})
221 writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})
222
Georg Brandl116aa622007-08-15 14:28:22 +0000223
224.. class:: Dialect
225
226 The :class:`Dialect` class is a container class relied on primarily for its
227 attributes, which are used to define the parameters for a specific
228 :class:`reader` or :class:`writer` instance.
229
230
231.. class:: excel()
232
233 The :class:`excel` class defines the usual properties of an Excel-generated CSV
234 file. It is registered with the dialect name ``'excel'``.
235
236
237.. class:: excel_tab()
238
239 The :class:`excel_tab` class defines the usual properties of an Excel-generated
240 TAB-delimited file. It is registered with the dialect name ``'excel-tab'``.
241
242
Georg Brandl7424dd32010-10-27 07:27:06 +0000243.. class:: unix_dialect()
244
245 The :class:`unix_dialect` class defines the usual properties of a CSV file
246 generated on UNIX systems, i.e. using ``'\n'`` as line terminator and quoting
247 all fields. It is registered with the dialect name ``'unix'``.
248
249 .. versionadded:: 3.2
250
251
Georg Brandl116aa622007-08-15 14:28:22 +0000252.. class:: Sniffer()
253
254 The :class:`Sniffer` class is used to deduce the format of a CSV file.
255
Benjamin Petersone41251e2008-04-25 01:59:09 +0000256 The :class:`Sniffer` class provides two methods:
Georg Brandl116aa622007-08-15 14:28:22 +0000257
Georg Brandlc2a4f4f2009-04-10 09:03:43 +0000258 .. method:: sniff(sample, delimiters=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000259
Benjamin Petersone41251e2008-04-25 01:59:09 +0000260 Analyze the given *sample* and return a :class:`Dialect` subclass
261 reflecting the parameters found. If the optional *delimiters* parameter
262 is given, it is interpreted as a string containing possible valid
263 delimiter characters.
Georg Brandl116aa622007-08-15 14:28:22 +0000264
265
Benjamin Petersone41251e2008-04-25 01:59:09 +0000266 .. method:: has_header(sample)
Georg Brandl116aa622007-08-15 14:28:22 +0000267
Benjamin Petersone41251e2008-04-25 01:59:09 +0000268 Analyze the sample text (presumed to be in CSV format) and return
269 :const:`True` if the first row appears to be a series of column headers.
Georg Brandl116aa622007-08-15 14:28:22 +0000270
Christian Heimes7f044312008-01-06 17:05:40 +0000271An example for :class:`Sniffer` use::
Georg Brandl116aa622007-08-15 14:28:22 +0000272
Ammar Askar275d2d92017-10-26 04:27:46 -0400273 with open('example.csv', newline='') as csvfile:
Ezio Melottie34f8a92012-09-15 05:51:45 +0300274 dialect = csv.Sniffer().sniff(csvfile.read(1024))
275 csvfile.seek(0)
276 reader = csv.reader(csvfile, dialect)
277 # ... process CSV file contents here ...
Christian Heimes7f044312008-01-06 17:05:40 +0000278
279
280The :mod:`csv` module defines the following constants:
Georg Brandl116aa622007-08-15 14:28:22 +0000281
282.. data:: QUOTE_ALL
283
284 Instructs :class:`writer` objects to quote all fields.
285
286
287.. data:: QUOTE_MINIMAL
288
289 Instructs :class:`writer` objects to only quote those fields which contain
290 special characters such as *delimiter*, *quotechar* or any of the characters in
291 *lineterminator*.
292
293
294.. data:: QUOTE_NONNUMERIC
295
296 Instructs :class:`writer` objects to quote all non-numeric fields.
297
298 Instructs the reader to convert all non-quoted fields to type *float*.
299
300
301.. data:: QUOTE_NONE
302
303 Instructs :class:`writer` objects to never quote fields. When the current
304 *delimiter* occurs in output data it is preceded by the current *escapechar*
305 character. If *escapechar* is not set, the writer will raise :exc:`Error` if
306 any characters that require escaping are encountered.
307
308 Instructs :class:`reader` to perform no special processing of quote characters.
309
310The :mod:`csv` module defines the following exception:
311
312
313.. exception:: Error
314
315 Raised by any of the functions when an error is detected.
316
Georg Brandl116aa622007-08-15 14:28:22 +0000317.. _csv-fmt-params:
318
319Dialects and Formatting Parameters
320----------------------------------
321
322To make it easier to specify the format of input and output records, specific
323formatting parameters are grouped together into dialects. A dialect is a
324subclass of the :class:`Dialect` class having a set of specific methods and a
325single :meth:`validate` method. When creating :class:`reader` or
326:class:`writer` objects, the programmer can specify a string or a subclass of
327the :class:`Dialect` class as the dialect parameter. In addition to, or instead
328of, the *dialect* parameter, the programmer can also specify individual
329formatting parameters, which have the same names as the attributes defined below
330for the :class:`Dialect` class.
331
332Dialects support the following attributes:
333
334
335.. attribute:: Dialect.delimiter
336
337 A one-character string used to separate fields. It defaults to ``','``.
338
339
340.. attribute:: Dialect.doublequote
341
Zachary Ware79e50882015-09-11 10:51:47 -0500342 Controls how instances of *quotechar* appearing inside a field should
Georg Brandl116aa622007-08-15 14:28:22 +0000343 themselves be quoted. When :const:`True`, the character is doubled. When
344 :const:`False`, the *escapechar* is used as a prefix to the *quotechar*. It
345 defaults to :const:`True`.
346
347 On output, if *doublequote* is :const:`False` and no *escapechar* is set,
348 :exc:`Error` is raised if a *quotechar* is found in a field.
349
350
351.. attribute:: Dialect.escapechar
352
353 A one-character string used by the writer to escape the *delimiter* if *quoting*
354 is set to :const:`QUOTE_NONE` and the *quotechar* if *doublequote* is
355 :const:`False`. On reading, the *escapechar* removes any special meaning from
356 the following character. It defaults to :const:`None`, which disables escaping.
357
358
359.. attribute:: Dialect.lineterminator
360
361 The string used to terminate lines produced by the :class:`writer`. It defaults
362 to ``'\r\n'``.
363
364 .. note::
365
366 The :class:`reader` is hard-coded to recognise either ``'\r'`` or ``'\n'`` as
367 end-of-line, and ignores *lineterminator*. This behavior may change in the
368 future.
369
370
371.. attribute:: Dialect.quotechar
372
373 A one-character string used to quote fields containing special characters, such
374 as the *delimiter* or *quotechar*, or which contain new-line characters. It
375 defaults to ``'"'``.
376
377
378.. attribute:: Dialect.quoting
379
380 Controls when quotes should be generated by the writer and recognised by the
381 reader. It can take on any of the :const:`QUOTE_\*` constants (see section
382 :ref:`csv-contents`) and defaults to :const:`QUOTE_MINIMAL`.
383
384
385.. attribute:: Dialect.skipinitialspace
386
387 When :const:`True`, whitespace immediately following the *delimiter* is ignored.
388 The default is :const:`False`.
389
390
Ezio Melottia69be282012-11-18 12:55:35 +0200391.. attribute:: Dialect.strict
392
393 When ``True``, raise exception :exc:`Error` on bad CSV input.
394 The default is ``False``.
395
Georg Brandl116aa622007-08-15 14:28:22 +0000396Reader Objects
397--------------
398
399Reader objects (:class:`DictReader` instances and objects returned by the
400:func:`reader` function) have the following public methods:
401
Georg Brandlc7485062009-04-01 15:53:15 +0000402.. method:: csvreader.__next__()
Georg Brandl116aa622007-08-15 14:28:22 +0000403
Amit Kumard618c8c2017-05-23 10:39:42 +0530404 Return the next row of the reader's iterable object as a list (if the object
405 was returned from :func:`reader`) or a dict (if it is a :class:`DictReader`
406 instance), parsed according to the current dialect. Usually you should call
407 this as ``next(reader)``.
Georg Brandlc7485062009-04-01 15:53:15 +0000408
Georg Brandl116aa622007-08-15 14:28:22 +0000409
410Reader objects have the following public attributes:
411
Georg Brandl116aa622007-08-15 14:28:22 +0000412.. attribute:: csvreader.dialect
413
414 A read-only description of the dialect in use by the parser.
415
416
417.. attribute:: csvreader.line_num
418
419 The number of lines read from the source iterator. This is not the same as the
420 number of records returned, as records can span multiple lines.
421
Georg Brandl116aa622007-08-15 14:28:22 +0000422
Skip Montanaroaf8fcfa2008-08-09 19:44:22 +0000423DictReader objects have the following public attribute:
424
Skip Montanaroaf8fcfa2008-08-09 19:44:22 +0000425.. attribute:: csvreader.fieldnames
426
427 If not passed as a parameter when creating the object, this attribute is
428 initialized upon first access or when the first record is read from the
429 file.
430
Skip Montanaroaf8fcfa2008-08-09 19:44:22 +0000431
432
Georg Brandl116aa622007-08-15 14:28:22 +0000433Writer Objects
434--------------
435
436:class:`Writer` objects (:class:`DictWriter` instances and objects returned by
437the :func:`writer` function) have the following public methods. A *row* must be
Serhiy Storchaka7901b482015-03-30 09:09:54 +0300438an iterable of strings or numbers for :class:`Writer` objects and a dictionary
Georg Brandl116aa622007-08-15 14:28:22 +0000439mapping fieldnames to strings or numbers (by passing them through :func:`str`
440first) for :class:`DictWriter` objects. Note that complex numbers are written
441out surrounded by parens. This may cause some problems for other programs which
442read CSV files (assuming they support complex numbers at all).
443
444
445.. method:: csvwriter.writerow(row)
446
447 Write the *row* parameter to the writer's file object, formatted according to
448 the current dialect.
449
Serhiy Storchaka7901b482015-03-30 09:09:54 +0300450 .. versionchanged:: 3.5
451 Added support of arbitrary iterables.
Georg Brandl116aa622007-08-15 14:28:22 +0000452
453.. method:: csvwriter.writerows(rows)
454
455 Write all the *rows* parameters (a list of *row* objects as described above) to
456 the writer's file object, formatted according to the current dialect.
457
458Writer objects have the following public attribute:
459
460
461.. attribute:: csvwriter.dialect
462
463 A read-only description of the dialect in use by the writer.
464
465
R. David Murraybe0698b2010-02-23 22:57:58 +0000466DictWriter objects have the following public method:
467
468
469.. method:: DictWriter.writeheader()
470
471 Write a row with the field names (as specified in the constructor).
472
R. David Murray19e45482010-02-23 23:00:34 +0000473 .. versionadded:: 3.2
R. David Murraybe0698b2010-02-23 22:57:58 +0000474
475
Georg Brandl116aa622007-08-15 14:28:22 +0000476.. _csv-examples:
477
478Examples
479--------
480
481The simplest example of reading a CSV file::
482
483 import csv
Eli Bendersky6860a922011-03-11 15:47:36 +0200484 with open('some.csv', newline='') as f:
485 reader = csv.reader(f)
486 for row in reader:
487 print(row)
Georg Brandl116aa622007-08-15 14:28:22 +0000488
489Reading a file with an alternate format::
490
491 import csv
R David Murray91887022011-03-19 22:30:14 -0400492 with open('passwd', newline='') as f:
Eli Bendersky6860a922011-03-11 15:47:36 +0200493 reader = csv.reader(f, delimiter=':', quoting=csv.QUOTE_NONE)
494 for row in reader:
495 print(row)
Georg Brandl116aa622007-08-15 14:28:22 +0000496
497The corresponding simplest possible writing example is::
498
499 import csv
R David Murray91887022011-03-19 22:30:14 -0400500 with open('some.csv', 'w', newline='') as f:
Eli Bendersky6860a922011-03-11 15:47:36 +0200501 writer = csv.writer(f)
502 writer.writerows(someiterable)
Georg Brandl116aa622007-08-15 14:28:22 +0000503
R. David Murray8b7d4aa2009-04-04 01:38:38 +0000504Since :func:`open` is used to open a CSV file for reading, the file
505will by default be decoded into unicode using the system default
506encoding (see :func:`locale.getpreferredencoding`). To decode a file
507using a different encoding, use the ``encoding`` argument of open::
508
Eli Bendersky6860a922011-03-11 15:47:36 +0200509 import csv
510 with open('some.csv', newline='', encoding='utf-8') as f:
511 reader = csv.reader(f)
512 for row in reader:
513 print(row)
R. David Murray8b7d4aa2009-04-04 01:38:38 +0000514
515The same applies to writing in something other than the system default
516encoding: specify the encoding argument when opening the output file.
517
Georg Brandl116aa622007-08-15 14:28:22 +0000518Registering a new dialect::
519
520 import csv
Georg Brandl116aa622007-08-15 14:28:22 +0000521 csv.register_dialect('unixpwd', delimiter=':', quoting=csv.QUOTE_NONE)
R David Murray91887022011-03-19 22:30:14 -0400522 with open('passwd', newline='') as f:
Eli Bendersky6860a922011-03-11 15:47:36 +0200523 reader = csv.reader(f, 'unixpwd')
Georg Brandl116aa622007-08-15 14:28:22 +0000524
525A slightly more advanced use of the reader --- catching and reporting errors::
526
527 import csv, sys
Eli Bendersky6860a922011-03-11 15:47:36 +0200528 filename = 'some.csv'
529 with open(filename, newline='') as f:
530 reader = csv.reader(f)
531 try:
532 for row in reader:
533 print(row)
534 except csv.Error as e:
535 sys.exit('file {}, line {}: {}'.format(filename, reader.line_num, e))
Georg Brandl116aa622007-08-15 14:28:22 +0000536
537And while the module doesn't directly support parsing strings, it can easily be
538done::
539
540 import csv
541 for row in csv.reader(['one,two,three']):
Georg Brandl6911e3c2007-09-04 07:15:32 +0000542 print(row)
Georg Brandl116aa622007-08-15 14:28:22 +0000543
Georg Brandl116aa622007-08-15 14:28:22 +0000544
R. David Murray8b7d4aa2009-04-04 01:38:38 +0000545.. rubric:: Footnotes
Georg Brandl116aa622007-08-15 14:28:22 +0000546
R David Murray91887022011-03-19 22:30:14 -0400547.. [1] If ``newline=''`` is not specified, newlines embedded inside quoted fields
548 will not be interpreted correctly, and on platforms that use ``\r\n`` linendings
R David Murray9c0d5ea2011-03-20 11:18:21 -0400549 on write an extra ``\r`` will be added. It should always be safe to specify
R David Murray1b00f252012-08-15 10:43:58 -0400550 ``newline=''``, since the csv module does its own
551 (:term:`universal <universal newlines>`) newline handling.