blob: 7fb4fc8256aca3b5a4c301534f1864c67d33ee26 [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
R David Murrayf031a6f2014-02-24 15:32:54 -0500149.. class:: DictReader(csvfile, fieldnames=None, restkey=None, restval=None, \
150 dialect='excel', *args, **kwds)
Georg Brandl116aa622007-08-15 14:28:22 +0000151
R David Murrayf031a6f2014-02-24 15:32:54 -0500152 Create an object which operates like a regular reader but maps the
153 information read into a dict whose keys are given by the optional
154 *fieldnames* parameter. The *fieldnames* parameter is a :mod:`sequence
155 <collections.abc>` whose elements are associated with the fields of the
156 input data in order. These elements become the keys of the resulting
157 dictionary. If the *fieldnames* parameter is omitted, the values in the
158 first row of the *csvfile* will be used as the fieldnames. If the row read
159 has more fields than the fieldnames sequence, the remaining data is added as
160 a sequence keyed by the value of *restkey*. If the row read has fewer
161 fields than the fieldnames sequence, the remaining keys take the value of
162 the optional *restval* parameter. Any other optional or keyword arguments
163 are passed to the underlying :class:`reader` instance.
Georg Brandl116aa622007-08-15 14:28:22 +0000164
Berker Peksagc8c64e32014-11-24 23:46:30 +0200165 A short usage example::
166
167 >>> import csv
168 >>> with open('names.csv') as csvfile:
169 ... reader = csv.DictReader(csvfile)
170 ... for row in reader:
171 ... print(row['first_name'], row['last_name'])
172 ...
173 Baked Beans
174 Lovely Spam
175 Wonderful Spam
176
Georg Brandl116aa622007-08-15 14:28:22 +0000177
R David Murrayf031a6f2014-02-24 15:32:54 -0500178.. class:: DictWriter(csvfile, fieldnames, restval='', extrasaction='raise', \
179 dialect='excel', *args, **kwds)
Georg Brandl116aa622007-08-15 14:28:22 +0000180
R David Murrayf031a6f2014-02-24 15:32:54 -0500181 Create an object which operates like a regular writer but maps dictionaries
182 onto output rows. The *fieldnames* parameter is a :mod:`sequence
183 <collections.abc>` of keys that identify the order in which values in the
184 dictionary passed to the :meth:`writerow` method are written to the
185 *csvfile*. The optional *restval* parameter specifies the value to be
186 written if the dictionary is missing a key in *fieldnames*. If the
187 dictionary passed to the :meth:`writerow` method contains a key not found in
188 *fieldnames*, the optional *extrasaction* parameter indicates what action to
189 take. If it is set to ``'raise'`` a :exc:`ValueError` is raised. If it is
190 set to ``'ignore'``, extra values in the dictionary are ignored. Any other
191 optional or keyword arguments are passed to the underlying :class:`writer`
192 instance.
Georg Brandl116aa622007-08-15 14:28:22 +0000193
R David Murrayf031a6f2014-02-24 15:32:54 -0500194 Note that unlike the :class:`DictReader` class, the *fieldnames* parameter
195 of the :class:`DictWriter` is not optional. Since Python's :class:`dict`
196 objects are not ordered, there is not enough information available to deduce
197 the order in which the row should be written to the *csvfile*.
Georg Brandl116aa622007-08-15 14:28:22 +0000198
Berker Peksagc8c64e32014-11-24 23:46:30 +0200199 A short usage example::
200
201 import csv
202
203 with open('names.csv', 'w') as csvfile:
204 fieldnames = ['first_name', 'last_name']
205 writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
206
207 writer.writeheader()
208 writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
209 writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})
210 writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})
211
Georg Brandl116aa622007-08-15 14:28:22 +0000212
213.. class:: Dialect
214
215 The :class:`Dialect` class is a container class relied on primarily for its
216 attributes, which are used to define the parameters for a specific
217 :class:`reader` or :class:`writer` instance.
218
219
220.. class:: excel()
221
222 The :class:`excel` class defines the usual properties of an Excel-generated CSV
223 file. It is registered with the dialect name ``'excel'``.
224
225
226.. class:: excel_tab()
227
228 The :class:`excel_tab` class defines the usual properties of an Excel-generated
229 TAB-delimited file. It is registered with the dialect name ``'excel-tab'``.
230
231
Georg Brandl7424dd32010-10-27 07:27:06 +0000232.. class:: unix_dialect()
233
234 The :class:`unix_dialect` class defines the usual properties of a CSV file
235 generated on UNIX systems, i.e. using ``'\n'`` as line terminator and quoting
236 all fields. It is registered with the dialect name ``'unix'``.
237
238 .. versionadded:: 3.2
239
240
Georg Brandl116aa622007-08-15 14:28:22 +0000241.. class:: Sniffer()
242
243 The :class:`Sniffer` class is used to deduce the format of a CSV file.
244
Benjamin Petersone41251e2008-04-25 01:59:09 +0000245 The :class:`Sniffer` class provides two methods:
Georg Brandl116aa622007-08-15 14:28:22 +0000246
Georg Brandlc2a4f4f2009-04-10 09:03:43 +0000247 .. method:: sniff(sample, delimiters=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000248
Benjamin Petersone41251e2008-04-25 01:59:09 +0000249 Analyze the given *sample* and return a :class:`Dialect` subclass
250 reflecting the parameters found. If the optional *delimiters* parameter
251 is given, it is interpreted as a string containing possible valid
252 delimiter characters.
Georg Brandl116aa622007-08-15 14:28:22 +0000253
254
Benjamin Petersone41251e2008-04-25 01:59:09 +0000255 .. method:: has_header(sample)
Georg Brandl116aa622007-08-15 14:28:22 +0000256
Benjamin Petersone41251e2008-04-25 01:59:09 +0000257 Analyze the sample text (presumed to be in CSV format) and return
258 :const:`True` if the first row appears to be a series of column headers.
Georg Brandl116aa622007-08-15 14:28:22 +0000259
Christian Heimes7f044312008-01-06 17:05:40 +0000260An example for :class:`Sniffer` use::
Georg Brandl116aa622007-08-15 14:28:22 +0000261
Ezio Melottie34f8a92012-09-15 05:51:45 +0300262 with open('example.csv') as csvfile:
263 dialect = csv.Sniffer().sniff(csvfile.read(1024))
264 csvfile.seek(0)
265 reader = csv.reader(csvfile, dialect)
266 # ... process CSV file contents here ...
Christian Heimes7f044312008-01-06 17:05:40 +0000267
268
269The :mod:`csv` module defines the following constants:
Georg Brandl116aa622007-08-15 14:28:22 +0000270
271.. data:: QUOTE_ALL
272
273 Instructs :class:`writer` objects to quote all fields.
274
275
276.. data:: QUOTE_MINIMAL
277
278 Instructs :class:`writer` objects to only quote those fields which contain
279 special characters such as *delimiter*, *quotechar* or any of the characters in
280 *lineterminator*.
281
282
283.. data:: QUOTE_NONNUMERIC
284
285 Instructs :class:`writer` objects to quote all non-numeric fields.
286
287 Instructs the reader to convert all non-quoted fields to type *float*.
288
289
290.. data:: QUOTE_NONE
291
292 Instructs :class:`writer` objects to never quote fields. When the current
293 *delimiter* occurs in output data it is preceded by the current *escapechar*
294 character. If *escapechar* is not set, the writer will raise :exc:`Error` if
295 any characters that require escaping are encountered.
296
297 Instructs :class:`reader` to perform no special processing of quote characters.
298
299The :mod:`csv` module defines the following exception:
300
301
302.. exception:: Error
303
304 Raised by any of the functions when an error is detected.
305
Georg Brandl116aa622007-08-15 14:28:22 +0000306.. _csv-fmt-params:
307
308Dialects and Formatting Parameters
309----------------------------------
310
311To make it easier to specify the format of input and output records, specific
312formatting parameters are grouped together into dialects. A dialect is a
313subclass of the :class:`Dialect` class having a set of specific methods and a
314single :meth:`validate` method. When creating :class:`reader` or
315:class:`writer` objects, the programmer can specify a string or a subclass of
316the :class:`Dialect` class as the dialect parameter. In addition to, or instead
317of, the *dialect* parameter, the programmer can also specify individual
318formatting parameters, which have the same names as the attributes defined below
319for the :class:`Dialect` class.
320
321Dialects support the following attributes:
322
323
324.. attribute:: Dialect.delimiter
325
326 A one-character string used to separate fields. It defaults to ``','``.
327
328
329.. attribute:: Dialect.doublequote
330
Zachary Ware79e50882015-09-11 10:51:47 -0500331 Controls how instances of *quotechar* appearing inside a field should
Georg Brandl116aa622007-08-15 14:28:22 +0000332 themselves be quoted. When :const:`True`, the character is doubled. When
333 :const:`False`, the *escapechar* is used as a prefix to the *quotechar*. It
334 defaults to :const:`True`.
335
336 On output, if *doublequote* is :const:`False` and no *escapechar* is set,
337 :exc:`Error` is raised if a *quotechar* is found in a field.
338
339
340.. attribute:: Dialect.escapechar
341
342 A one-character string used by the writer to escape the *delimiter* if *quoting*
343 is set to :const:`QUOTE_NONE` and the *quotechar* if *doublequote* is
344 :const:`False`. On reading, the *escapechar* removes any special meaning from
345 the following character. It defaults to :const:`None`, which disables escaping.
346
347
348.. attribute:: Dialect.lineterminator
349
350 The string used to terminate lines produced by the :class:`writer`. It defaults
351 to ``'\r\n'``.
352
353 .. note::
354
355 The :class:`reader` is hard-coded to recognise either ``'\r'`` or ``'\n'`` as
356 end-of-line, and ignores *lineterminator*. This behavior may change in the
357 future.
358
359
360.. attribute:: Dialect.quotechar
361
362 A one-character string used to quote fields containing special characters, such
363 as the *delimiter* or *quotechar*, or which contain new-line characters. It
364 defaults to ``'"'``.
365
366
367.. attribute:: Dialect.quoting
368
369 Controls when quotes should be generated by the writer and recognised by the
370 reader. It can take on any of the :const:`QUOTE_\*` constants (see section
371 :ref:`csv-contents`) and defaults to :const:`QUOTE_MINIMAL`.
372
373
374.. attribute:: Dialect.skipinitialspace
375
376 When :const:`True`, whitespace immediately following the *delimiter* is ignored.
377 The default is :const:`False`.
378
379
Ezio Melottia69be282012-11-18 12:55:35 +0200380.. attribute:: Dialect.strict
381
382 When ``True``, raise exception :exc:`Error` on bad CSV input.
383 The default is ``False``.
384
Georg Brandl116aa622007-08-15 14:28:22 +0000385Reader Objects
386--------------
387
388Reader objects (:class:`DictReader` instances and objects returned by the
389:func:`reader` function) have the following public methods:
390
Georg Brandlc7485062009-04-01 15:53:15 +0000391.. method:: csvreader.__next__()
Georg Brandl116aa622007-08-15 14:28:22 +0000392
393 Return the next row of the reader's iterable object as a list, parsed according
Georg Brandlc7485062009-04-01 15:53:15 +0000394 to the current dialect. Usually you should call this as ``next(reader)``.
395
Georg Brandl116aa622007-08-15 14:28:22 +0000396
397Reader objects have the following public attributes:
398
Georg Brandl116aa622007-08-15 14:28:22 +0000399.. attribute:: csvreader.dialect
400
401 A read-only description of the dialect in use by the parser.
402
403
404.. attribute:: csvreader.line_num
405
406 The number of lines read from the source iterator. This is not the same as the
407 number of records returned, as records can span multiple lines.
408
Georg Brandl116aa622007-08-15 14:28:22 +0000409
Skip Montanaroaf8fcfa2008-08-09 19:44:22 +0000410DictReader objects have the following public attribute:
411
Skip Montanaroaf8fcfa2008-08-09 19:44:22 +0000412.. attribute:: csvreader.fieldnames
413
414 If not passed as a parameter when creating the object, this attribute is
415 initialized upon first access or when the first record is read from the
416 file.
417
Skip Montanaroaf8fcfa2008-08-09 19:44:22 +0000418
419
Georg Brandl116aa622007-08-15 14:28:22 +0000420Writer Objects
421--------------
422
423:class:`Writer` objects (:class:`DictWriter` instances and objects returned by
424the :func:`writer` function) have the following public methods. A *row* must be
Serhiy Storchaka7901b482015-03-30 09:09:54 +0300425an iterable of strings or numbers for :class:`Writer` objects and a dictionary
Georg Brandl116aa622007-08-15 14:28:22 +0000426mapping fieldnames to strings or numbers (by passing them through :func:`str`
427first) for :class:`DictWriter` objects. Note that complex numbers are written
428out surrounded by parens. This may cause some problems for other programs which
429read CSV files (assuming they support complex numbers at all).
430
431
432.. method:: csvwriter.writerow(row)
433
434 Write the *row* parameter to the writer's file object, formatted according to
435 the current dialect.
436
Serhiy Storchaka7901b482015-03-30 09:09:54 +0300437 .. versionchanged:: 3.5
438 Added support of arbitrary iterables.
Georg Brandl116aa622007-08-15 14:28:22 +0000439
440.. method:: csvwriter.writerows(rows)
441
442 Write all the *rows* parameters (a list of *row* objects as described above) to
443 the writer's file object, formatted according to the current dialect.
444
445Writer objects have the following public attribute:
446
447
448.. attribute:: csvwriter.dialect
449
450 A read-only description of the dialect in use by the writer.
451
452
R. David Murraybe0698b2010-02-23 22:57:58 +0000453DictWriter objects have the following public method:
454
455
456.. method:: DictWriter.writeheader()
457
458 Write a row with the field names (as specified in the constructor).
459
R. David Murray19e45482010-02-23 23:00:34 +0000460 .. versionadded:: 3.2
R. David Murraybe0698b2010-02-23 22:57:58 +0000461
462
Georg Brandl116aa622007-08-15 14:28:22 +0000463.. _csv-examples:
464
465Examples
466--------
467
468The simplest example of reading a CSV file::
469
470 import csv
Eli Bendersky6860a922011-03-11 15:47:36 +0200471 with open('some.csv', newline='') as f:
472 reader = csv.reader(f)
473 for row in reader:
474 print(row)
Georg Brandl116aa622007-08-15 14:28:22 +0000475
476Reading a file with an alternate format::
477
478 import csv
R David Murray91887022011-03-19 22:30:14 -0400479 with open('passwd', newline='') as f:
Eli Bendersky6860a922011-03-11 15:47:36 +0200480 reader = csv.reader(f, delimiter=':', quoting=csv.QUOTE_NONE)
481 for row in reader:
482 print(row)
Georg Brandl116aa622007-08-15 14:28:22 +0000483
484The corresponding simplest possible writing example is::
485
486 import csv
R David Murray91887022011-03-19 22:30:14 -0400487 with open('some.csv', 'w', newline='') as f:
Eli Bendersky6860a922011-03-11 15:47:36 +0200488 writer = csv.writer(f)
489 writer.writerows(someiterable)
Georg Brandl116aa622007-08-15 14:28:22 +0000490
R. David Murray8b7d4aa2009-04-04 01:38:38 +0000491Since :func:`open` is used to open a CSV file for reading, the file
492will by default be decoded into unicode using the system default
493encoding (see :func:`locale.getpreferredencoding`). To decode a file
494using a different encoding, use the ``encoding`` argument of open::
495
Eli Bendersky6860a922011-03-11 15:47:36 +0200496 import csv
497 with open('some.csv', newline='', encoding='utf-8') as f:
498 reader = csv.reader(f)
499 for row in reader:
500 print(row)
R. David Murray8b7d4aa2009-04-04 01:38:38 +0000501
502The same applies to writing in something other than the system default
503encoding: specify the encoding argument when opening the output file.
504
Georg Brandl116aa622007-08-15 14:28:22 +0000505Registering a new dialect::
506
507 import csv
Georg Brandl116aa622007-08-15 14:28:22 +0000508 csv.register_dialect('unixpwd', delimiter=':', quoting=csv.QUOTE_NONE)
R David Murray91887022011-03-19 22:30:14 -0400509 with open('passwd', newline='') as f:
Eli Bendersky6860a922011-03-11 15:47:36 +0200510 reader = csv.reader(f, 'unixpwd')
Georg Brandl116aa622007-08-15 14:28:22 +0000511
512A slightly more advanced use of the reader --- catching and reporting errors::
513
514 import csv, sys
Eli Bendersky6860a922011-03-11 15:47:36 +0200515 filename = 'some.csv'
516 with open(filename, newline='') as f:
517 reader = csv.reader(f)
518 try:
519 for row in reader:
520 print(row)
521 except csv.Error as e:
522 sys.exit('file {}, line {}: {}'.format(filename, reader.line_num, e))
Georg Brandl116aa622007-08-15 14:28:22 +0000523
524And while the module doesn't directly support parsing strings, it can easily be
525done::
526
527 import csv
528 for row in csv.reader(['one,two,three']):
Georg Brandl6911e3c2007-09-04 07:15:32 +0000529 print(row)
Georg Brandl116aa622007-08-15 14:28:22 +0000530
Georg Brandl116aa622007-08-15 14:28:22 +0000531
R. David Murray8b7d4aa2009-04-04 01:38:38 +0000532.. rubric:: Footnotes
Georg Brandl116aa622007-08-15 14:28:22 +0000533
R David Murray91887022011-03-19 22:30:14 -0400534.. [1] If ``newline=''`` is not specified, newlines embedded inside quoted fields
535 will not be interpreted correctly, and on platforms that use ``\r\n`` linendings
R David Murray9c0d5ea2011-03-20 11:18:21 -0400536 on write an extra ``\r`` will be added. It should always be safe to specify
R David Murray1b00f252012-08-15 10:43:58 -0400537 ``newline=''``, since the csv module does its own
538 (:term:`universal <universal newlines>`) newline handling.