blob: e9a9cb5ddb3ba4a948869c4b858c1c722adfba9e [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.
6.. sectionauthor:: Skip Montanaro <skip@pobox.com>
7
8
Georg Brandl116aa622007-08-15 14:28:22 +00009.. index::
10 single: csv
11 pair: data; tabular
12
13The so-called CSV (Comma Separated Values) format is the most common import and
Skip Montanarob40dea72011-03-19 09:09:30 -050014export format for spreadsheets and databases. CSV format was used for many
15years prior to attempts to describe the format in a standardized way in
16:rfc:`4180`. The lack of a well-defined standard means that subtle differences
17often exist in the data produced and consumed by different applications. These
18differences can make it annoying to process CSV files from multiple sources.
19Still, while the delimiters and quoting characters vary, the overall format is
20similar enough that it is possible to write a single module which can
21efficiently manipulate such data, hiding the details of reading and writing the
22data from the programmer.
Georg Brandl116aa622007-08-15 14:28:22 +000023
24The :mod:`csv` module implements classes to read and write tabular data in CSV
25format. It allows programmers to say, "write this data in the format preferred
26by Excel," or "read data from this file which was generated by Excel," without
27knowing the precise details of the CSV format used by Excel. Programmers can
28also describe the CSV formats understood by other applications or define their
29own special-purpose CSV formats.
30
31The :mod:`csv` module's :class:`reader` and :class:`writer` objects read and
32write sequences. Programmers can also read and write data in dictionary form
33using the :class:`DictReader` and :class:`DictWriter` classes.
34
Georg Brandl116aa622007-08-15 14:28:22 +000035.. seealso::
36
Georg Brandl116aa622007-08-15 14:28:22 +000037 :pep:`305` - CSV File API
38 The Python Enhancement Proposal which proposed this addition to Python.
39
40
41.. _csv-contents:
42
43Module Contents
44---------------
45
46The :mod:`csv` module defines the following functions:
47
48
R David Murray1b00f252012-08-15 10:43:58 -040049.. index::
50 single: universal newlines; csv.reader function
51
Georg Brandlc2a4f4f2009-04-10 09:03:43 +000052.. function:: reader(csvfile, dialect='excel', **fmtparams)
Georg Brandl116aa622007-08-15 14:28:22 +000053
54 Return a reader object which will iterate over lines in the given *csvfile*.
Georg Brandl9afde1c2007-11-01 20:32:30 +000055 *csvfile* can be any object which supports the :term:`iterator` protocol and returns a
Georg Brandlb30f3302011-01-06 09:23:56 +000056 string each time its :meth:`!__next__` method is called --- :term:`file objects
Antoine Pitrou11cb9612010-09-15 11:11:28 +000057 <file object>` and list objects are both suitable. If *csvfile* is a file object,
R David Murray91887022011-03-19 22:30:14 -040058 it should be opened with ``newline=''``. [1]_ An optional
Georg Brandl116aa622007-08-15 14:28:22 +000059 *dialect* parameter can be given which is used to define a set of parameters
60 specific to a particular CSV dialect. It may be an instance of a subclass of
61 the :class:`Dialect` class or one of the strings returned by the
Georg Brandlc2a4f4f2009-04-10 09:03:43 +000062 :func:`list_dialects` function. The other optional *fmtparams* keyword arguments
Georg Brandl116aa622007-08-15 14:28:22 +000063 can be given to override individual formatting parameters in the current
64 dialect. For full details about the dialect and formatting parameters, see
65 section :ref:`csv-fmt-params`.
66
Skip Montanaro0468df32009-03-25 00:52:18 +000067 Each row read from the csv file is returned as a list of strings. No
R. David Murray8b7d4aa2009-04-04 01:38:38 +000068 automatic data type conversion is performed unless the ``QUOTE_NONNUMERIC`` format
69 option is specified (in which case unquoted fields are transformed into floats).
Georg Brandl116aa622007-08-15 14:28:22 +000070
Christian Heimesb9eccbf2007-12-05 20:18:38 +000071 A short usage example::
Georg Brandl48310cd2009-01-03 21:18:54 +000072
Christian Heimesb9eccbf2007-12-05 20:18:38 +000073 >>> import csv
Ezio Melottie34f8a92012-09-15 05:51:45 +030074 >>> with open('eggs.csv', newline='') as csvfile:
75 ... spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
76 ... for row in spamreader:
77 ... print(', '.join(row))
Christian Heimesb9eccbf2007-12-05 20:18:38 +000078 Spam, Spam, Spam, Spam, Spam, Baked Beans
79 Spam, Lovely Spam, Wonderful Spam
80
Georg Brandl116aa622007-08-15 14:28:22 +000081
Georg Brandlc2a4f4f2009-04-10 09:03:43 +000082.. function:: writer(csvfile, dialect='excel', **fmtparams)
Georg Brandl116aa622007-08-15 14:28:22 +000083
84 Return a writer object responsible for converting the user's data into delimited
85 strings on the given file-like object. *csvfile* can be any object with a
R David Murray9c0d5ea2011-03-20 11:18:21 -040086 :func:`write` method. If *csvfile* is a file object, it should be opened with
87 ``newline=''`` [1]_. An optional *dialect*
Georg Brandl116aa622007-08-15 14:28:22 +000088 parameter can be given which is used to define a set of parameters specific to a
89 particular CSV dialect. It may be an instance of a subclass of the
90 :class:`Dialect` class or one of the strings returned by the
Georg Brandlc2a4f4f2009-04-10 09:03:43 +000091 :func:`list_dialects` function. The other optional *fmtparams* keyword arguments
Georg Brandl116aa622007-08-15 14:28:22 +000092 can be given to override individual formatting parameters in the current
93 dialect. For full details about the dialect and formatting parameters, see
94 section :ref:`csv-fmt-params`. To make it
95 as easy as possible to interface with modules which implement the DB API, the
96 value :const:`None` is written as the empty string. While this isn't a
97 reversible transformation, it makes it easier to dump SQL NULL data values to
98 CSV files without preprocessing the data returned from a ``cursor.fetch*`` call.
99 All other non-string data are stringified with :func:`str` before being written.
100
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000101 A short usage example::
102
Ezio Melottie34f8a92012-09-15 05:51:45 +0300103 import csv
104 with open('eggs.csv', 'w', newline='') as csvfile:
105 spamwriter = csv.writer(csvfile, delimiter=' ',
106 quotechar='|', quoting=csv.QUOTE_MINIMAL)
107 spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
108 spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000109
Georg Brandl116aa622007-08-15 14:28:22 +0000110
Berker Peksag12b50ce2015-06-05 15:17:51 +0300111.. function:: register_dialect(name[, dialect[, **fmtparams]])
Georg Brandl116aa622007-08-15 14:28:22 +0000112
Georg Brandlf6945182008-02-01 11:56:49 +0000113 Associate *dialect* with *name*. *name* must be a string. The
Georg Brandl116aa622007-08-15 14:28:22 +0000114 dialect can be specified either by passing a sub-class of :class:`Dialect`, or
Georg Brandlc2a4f4f2009-04-10 09:03:43 +0000115 by *fmtparams* keyword arguments, or both, with keyword arguments overriding
Georg Brandl116aa622007-08-15 14:28:22 +0000116 parameters of the dialect. For full details about the dialect and formatting
117 parameters, see section :ref:`csv-fmt-params`.
118
119
120.. function:: unregister_dialect(name)
121
122 Delete the dialect associated with *name* from the dialect registry. An
123 :exc:`Error` is raised if *name* is not a registered dialect name.
124
125
126.. function:: get_dialect(name)
127
Georg Brandl6554cb92007-12-02 23:15:43 +0000128 Return the dialect associated with *name*. An :exc:`Error` is raised if
129 *name* is not a registered dialect name. This function returns an immutable
130 :class:`Dialect`.
Georg Brandl116aa622007-08-15 14:28:22 +0000131
132.. function:: list_dialects()
133
134 Return the names of all registered dialects.
135
136
137.. function:: field_size_limit([new_limit])
138
139 Returns the current maximum field size allowed by the parser. If *new_limit* is
140 given, this becomes the new limit.
141
Georg Brandl116aa622007-08-15 14:28:22 +0000142
143The :mod:`csv` module defines the following classes:
144
Larry Hastings3732ed22014-03-15 21:13:56 -0700145.. class:: DictReader(csvfile, fieldnames=None, restkey=None, restval=None, \
146 dialect='excel', *args, **kwds)
Georg Brandl116aa622007-08-15 14:28:22 +0000147
Larry Hastings3732ed22014-03-15 21:13:56 -0700148 Create an object which operates like a regular reader but maps the
149 information read into a dict whose keys are given by the optional
150 *fieldnames* parameter. The *fieldnames* parameter is a :mod:`sequence
151 <collections.abc>` whose elements are associated with the fields of the
152 input data in order. These elements become the keys of the resulting
153 dictionary. If the *fieldnames* parameter is omitted, the values in the
154 first row of the *csvfile* will be used as the fieldnames. If the row read
155 has more fields than the fieldnames sequence, the remaining data is added as
156 a sequence keyed by the value of *restkey*. If the row read has fewer
157 fields than the fieldnames sequence, the remaining keys take the value of
158 the optional *restval* parameter. Any other optional or keyword arguments
159 are passed to the underlying :class:`reader` instance.
Georg Brandl116aa622007-08-15 14:28:22 +0000160
Berker Peksagc8c64e32014-11-24 23:46:30 +0200161 A short usage example::
162
163 >>> import csv
164 >>> with open('names.csv') as csvfile:
165 ... reader = csv.DictReader(csvfile)
166 ... for row in reader:
167 ... print(row['first_name'], row['last_name'])
168 ...
169 Baked Beans
170 Lovely Spam
171 Wonderful Spam
172
Georg Brandl116aa622007-08-15 14:28:22 +0000173
Larry Hastings3732ed22014-03-15 21:13:56 -0700174.. class:: DictWriter(csvfile, fieldnames, restval='', extrasaction='raise', \
175 dialect='excel', *args, **kwds)
Georg Brandl116aa622007-08-15 14:28:22 +0000176
Larry Hastings3732ed22014-03-15 21:13:56 -0700177 Create an object which operates like a regular writer but maps dictionaries
178 onto output rows. The *fieldnames* parameter is a :mod:`sequence
179 <collections.abc>` of keys that identify the order in which values in the
180 dictionary passed to the :meth:`writerow` method are written to the
181 *csvfile*. The optional *restval* parameter specifies the value to be
182 written if the dictionary is missing a key in *fieldnames*. If the
183 dictionary passed to the :meth:`writerow` method contains a key not found in
184 *fieldnames*, the optional *extrasaction* parameter indicates what action to
185 take. If it is set to ``'raise'`` a :exc:`ValueError` is raised. If it is
186 set to ``'ignore'``, extra values in the dictionary are ignored. Any other
187 optional or keyword arguments are passed to the underlying :class:`writer`
188 instance.
Georg Brandl116aa622007-08-15 14:28:22 +0000189
Larry Hastings3732ed22014-03-15 21:13:56 -0700190 Note that unlike the :class:`DictReader` class, the *fieldnames* parameter
191 of the :class:`DictWriter` is not optional. Since Python's :class:`dict`
192 objects are not ordered, there is not enough information available to deduce
193 the order in which the row should be written to the *csvfile*.
Georg Brandl116aa622007-08-15 14:28:22 +0000194
Berker Peksagc8c64e32014-11-24 23:46:30 +0200195 A short usage example::
196
197 import csv
198
199 with open('names.csv', 'w') as csvfile:
200 fieldnames = ['first_name', 'last_name']
201 writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
202
203 writer.writeheader()
204 writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
205 writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})
206 writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})
207
Georg Brandl116aa622007-08-15 14:28:22 +0000208
209.. class:: Dialect
210
211 The :class:`Dialect` class is a container class relied on primarily for its
212 attributes, which are used to define the parameters for a specific
213 :class:`reader` or :class:`writer` instance.
214
215
216.. class:: excel()
217
218 The :class:`excel` class defines the usual properties of an Excel-generated CSV
219 file. It is registered with the dialect name ``'excel'``.
220
221
222.. class:: excel_tab()
223
224 The :class:`excel_tab` class defines the usual properties of an Excel-generated
225 TAB-delimited file. It is registered with the dialect name ``'excel-tab'``.
226
227
Georg Brandl7424dd32010-10-27 07:27:06 +0000228.. class:: unix_dialect()
229
230 The :class:`unix_dialect` class defines the usual properties of a CSV file
231 generated on UNIX systems, i.e. using ``'\n'`` as line terminator and quoting
232 all fields. It is registered with the dialect name ``'unix'``.
233
234 .. versionadded:: 3.2
235
236
Georg Brandl116aa622007-08-15 14:28:22 +0000237.. class:: Sniffer()
238
239 The :class:`Sniffer` class is used to deduce the format of a CSV file.
240
Benjamin Petersone41251e2008-04-25 01:59:09 +0000241 The :class:`Sniffer` class provides two methods:
Georg Brandl116aa622007-08-15 14:28:22 +0000242
Georg Brandlc2a4f4f2009-04-10 09:03:43 +0000243 .. method:: sniff(sample, delimiters=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000244
Benjamin Petersone41251e2008-04-25 01:59:09 +0000245 Analyze the given *sample* and return a :class:`Dialect` subclass
246 reflecting the parameters found. If the optional *delimiters* parameter
247 is given, it is interpreted as a string containing possible valid
248 delimiter characters.
Georg Brandl116aa622007-08-15 14:28:22 +0000249
250
Benjamin Petersone41251e2008-04-25 01:59:09 +0000251 .. method:: has_header(sample)
Georg Brandl116aa622007-08-15 14:28:22 +0000252
Benjamin Petersone41251e2008-04-25 01:59:09 +0000253 Analyze the sample text (presumed to be in CSV format) and return
254 :const:`True` if the first row appears to be a series of column headers.
Georg Brandl116aa622007-08-15 14:28:22 +0000255
Christian Heimes7f044312008-01-06 17:05:40 +0000256An example for :class:`Sniffer` use::
Georg Brandl116aa622007-08-15 14:28:22 +0000257
Ezio Melottie34f8a92012-09-15 05:51:45 +0300258 with open('example.csv') as csvfile:
259 dialect = csv.Sniffer().sniff(csvfile.read(1024))
260 csvfile.seek(0)
261 reader = csv.reader(csvfile, dialect)
262 # ... process CSV file contents here ...
Christian Heimes7f044312008-01-06 17:05:40 +0000263
264
265The :mod:`csv` module defines the following constants:
Georg Brandl116aa622007-08-15 14:28:22 +0000266
267.. data:: QUOTE_ALL
268
269 Instructs :class:`writer` objects to quote all fields.
270
271
272.. data:: QUOTE_MINIMAL
273
274 Instructs :class:`writer` objects to only quote those fields which contain
275 special characters such as *delimiter*, *quotechar* or any of the characters in
276 *lineterminator*.
277
278
279.. data:: QUOTE_NONNUMERIC
280
281 Instructs :class:`writer` objects to quote all non-numeric fields.
282
283 Instructs the reader to convert all non-quoted fields to type *float*.
284
285
286.. data:: QUOTE_NONE
287
288 Instructs :class:`writer` objects to never quote fields. When the current
289 *delimiter* occurs in output data it is preceded by the current *escapechar*
290 character. If *escapechar* is not set, the writer will raise :exc:`Error` if
291 any characters that require escaping are encountered.
292
293 Instructs :class:`reader` to perform no special processing of quote characters.
294
295The :mod:`csv` module defines the following exception:
296
297
298.. exception:: Error
299
300 Raised by any of the functions when an error is detected.
301
Georg Brandl116aa622007-08-15 14:28:22 +0000302.. _csv-fmt-params:
303
304Dialects and Formatting Parameters
305----------------------------------
306
307To make it easier to specify the format of input and output records, specific
308formatting parameters are grouped together into dialects. A dialect is a
309subclass of the :class:`Dialect` class having a set of specific methods and a
310single :meth:`validate` method. When creating :class:`reader` or
311:class:`writer` objects, the programmer can specify a string or a subclass of
312the :class:`Dialect` class as the dialect parameter. In addition to, or instead
313of, the *dialect* parameter, the programmer can also specify individual
314formatting parameters, which have the same names as the attributes defined below
315for the :class:`Dialect` class.
316
317Dialects support the following attributes:
318
319
320.. attribute:: Dialect.delimiter
321
322 A one-character string used to separate fields. It defaults to ``','``.
323
324
325.. attribute:: Dialect.doublequote
326
Zachary Ware79e50882015-09-11 10:51:47 -0500327 Controls how instances of *quotechar* appearing inside a field should
Georg Brandl116aa622007-08-15 14:28:22 +0000328 themselves be quoted. When :const:`True`, the character is doubled. When
329 :const:`False`, the *escapechar* is used as a prefix to the *quotechar*. It
330 defaults to :const:`True`.
331
332 On output, if *doublequote* is :const:`False` and no *escapechar* is set,
333 :exc:`Error` is raised if a *quotechar* is found in a field.
334
335
336.. attribute:: Dialect.escapechar
337
338 A one-character string used by the writer to escape the *delimiter* if *quoting*
339 is set to :const:`QUOTE_NONE` and the *quotechar* if *doublequote* is
340 :const:`False`. On reading, the *escapechar* removes any special meaning from
341 the following character. It defaults to :const:`None`, which disables escaping.
342
343
344.. attribute:: Dialect.lineterminator
345
346 The string used to terminate lines produced by the :class:`writer`. It defaults
347 to ``'\r\n'``.
348
349 .. note::
350
351 The :class:`reader` is hard-coded to recognise either ``'\r'`` or ``'\n'`` as
352 end-of-line, and ignores *lineterminator*. This behavior may change in the
353 future.
354
355
356.. attribute:: Dialect.quotechar
357
358 A one-character string used to quote fields containing special characters, such
359 as the *delimiter* or *quotechar*, or which contain new-line characters. It
360 defaults to ``'"'``.
361
362
363.. attribute:: Dialect.quoting
364
365 Controls when quotes should be generated by the writer and recognised by the
366 reader. It can take on any of the :const:`QUOTE_\*` constants (see section
367 :ref:`csv-contents`) and defaults to :const:`QUOTE_MINIMAL`.
368
369
370.. attribute:: Dialect.skipinitialspace
371
372 When :const:`True`, whitespace immediately following the *delimiter* is ignored.
373 The default is :const:`False`.
374
375
Ezio Melottia69be282012-11-18 12:55:35 +0200376.. attribute:: Dialect.strict
377
378 When ``True``, raise exception :exc:`Error` on bad CSV input.
379 The default is ``False``.
380
Georg Brandl116aa622007-08-15 14:28:22 +0000381Reader Objects
382--------------
383
384Reader objects (:class:`DictReader` instances and objects returned by the
385:func:`reader` function) have the following public methods:
386
Georg Brandlc7485062009-04-01 15:53:15 +0000387.. method:: csvreader.__next__()
Georg Brandl116aa622007-08-15 14:28:22 +0000388
389 Return the next row of the reader's iterable object as a list, parsed according
Georg Brandlc7485062009-04-01 15:53:15 +0000390 to the current dialect. Usually you should call this as ``next(reader)``.
391
Georg Brandl116aa622007-08-15 14:28:22 +0000392
393Reader objects have the following public attributes:
394
Georg Brandl116aa622007-08-15 14:28:22 +0000395.. attribute:: csvreader.dialect
396
397 A read-only description of the dialect in use by the parser.
398
399
400.. attribute:: csvreader.line_num
401
402 The number of lines read from the source iterator. This is not the same as the
403 number of records returned, as records can span multiple lines.
404
Georg Brandl116aa622007-08-15 14:28:22 +0000405
Skip Montanaroaf8fcfa2008-08-09 19:44:22 +0000406DictReader objects have the following public attribute:
407
Skip Montanaroaf8fcfa2008-08-09 19:44:22 +0000408.. attribute:: csvreader.fieldnames
409
410 If not passed as a parameter when creating the object, this attribute is
411 initialized upon first access or when the first record is read from the
412 file.
413
Skip Montanaroaf8fcfa2008-08-09 19:44:22 +0000414
415
Georg Brandl116aa622007-08-15 14:28:22 +0000416Writer Objects
417--------------
418
419:class:`Writer` objects (:class:`DictWriter` instances and objects returned by
420the :func:`writer` function) have the following public methods. A *row* must be
421a sequence of strings or numbers for :class:`Writer` objects and a dictionary
422mapping fieldnames to strings or numbers (by passing them through :func:`str`
423first) for :class:`DictWriter` objects. Note that complex numbers are written
424out surrounded by parens. This may cause some problems for other programs which
425read CSV files (assuming they support complex numbers at all).
426
427
428.. method:: csvwriter.writerow(row)
429
430 Write the *row* parameter to the writer's file object, formatted according to
431 the current dialect.
432
433
434.. method:: csvwriter.writerows(rows)
435
436 Write all the *rows* parameters (a list of *row* objects as described above) to
437 the writer's file object, formatted according to the current dialect.
438
439Writer objects have the following public attribute:
440
441
442.. attribute:: csvwriter.dialect
443
444 A read-only description of the dialect in use by the writer.
445
446
R. David Murraybe0698b2010-02-23 22:57:58 +0000447DictWriter objects have the following public method:
448
449
450.. method:: DictWriter.writeheader()
451
452 Write a row with the field names (as specified in the constructor).
453
R. David Murray19e45482010-02-23 23:00:34 +0000454 .. versionadded:: 3.2
R. David Murraybe0698b2010-02-23 22:57:58 +0000455
456
Georg Brandl116aa622007-08-15 14:28:22 +0000457.. _csv-examples:
458
459Examples
460--------
461
462The simplest example of reading a CSV file::
463
464 import csv
Eli Bendersky6860a922011-03-11 15:47:36 +0200465 with open('some.csv', newline='') as f:
466 reader = csv.reader(f)
467 for row in reader:
468 print(row)
Georg Brandl116aa622007-08-15 14:28:22 +0000469
470Reading a file with an alternate format::
471
472 import csv
R David Murray91887022011-03-19 22:30:14 -0400473 with open('passwd', newline='') as f:
Eli Bendersky6860a922011-03-11 15:47:36 +0200474 reader = csv.reader(f, delimiter=':', quoting=csv.QUOTE_NONE)
475 for row in reader:
476 print(row)
Georg Brandl116aa622007-08-15 14:28:22 +0000477
478The corresponding simplest possible writing example is::
479
480 import csv
R David Murray91887022011-03-19 22:30:14 -0400481 with open('some.csv', 'w', newline='') as f:
Eli Bendersky6860a922011-03-11 15:47:36 +0200482 writer = csv.writer(f)
483 writer.writerows(someiterable)
Georg Brandl116aa622007-08-15 14:28:22 +0000484
R. David Murray8b7d4aa2009-04-04 01:38:38 +0000485Since :func:`open` is used to open a CSV file for reading, the file
486will by default be decoded into unicode using the system default
487encoding (see :func:`locale.getpreferredencoding`). To decode a file
488using a different encoding, use the ``encoding`` argument of open::
489
Eli Bendersky6860a922011-03-11 15:47:36 +0200490 import csv
491 with open('some.csv', newline='', encoding='utf-8') as f:
492 reader = csv.reader(f)
493 for row in reader:
494 print(row)
R. David Murray8b7d4aa2009-04-04 01:38:38 +0000495
496The same applies to writing in something other than the system default
497encoding: specify the encoding argument when opening the output file.
498
Georg Brandl116aa622007-08-15 14:28:22 +0000499Registering a new dialect::
500
501 import csv
Georg Brandl116aa622007-08-15 14:28:22 +0000502 csv.register_dialect('unixpwd', delimiter=':', quoting=csv.QUOTE_NONE)
R David Murray91887022011-03-19 22:30:14 -0400503 with open('passwd', newline='') as f:
Eli Bendersky6860a922011-03-11 15:47:36 +0200504 reader = csv.reader(f, 'unixpwd')
Georg Brandl116aa622007-08-15 14:28:22 +0000505
506A slightly more advanced use of the reader --- catching and reporting errors::
507
508 import csv, sys
Eli Bendersky6860a922011-03-11 15:47:36 +0200509 filename = 'some.csv'
510 with open(filename, newline='') as f:
511 reader = csv.reader(f)
512 try:
513 for row in reader:
514 print(row)
515 except csv.Error as e:
516 sys.exit('file {}, line {}: {}'.format(filename, reader.line_num, e))
Georg Brandl116aa622007-08-15 14:28:22 +0000517
518And while the module doesn't directly support parsing strings, it can easily be
519done::
520
521 import csv
522 for row in csv.reader(['one,two,three']):
Georg Brandl6911e3c2007-09-04 07:15:32 +0000523 print(row)
Georg Brandl116aa622007-08-15 14:28:22 +0000524
Georg Brandl116aa622007-08-15 14:28:22 +0000525
R. David Murray8b7d4aa2009-04-04 01:38:38 +0000526.. rubric:: Footnotes
Georg Brandl116aa622007-08-15 14:28:22 +0000527
R David Murray91887022011-03-19 22:30:14 -0400528.. [1] If ``newline=''`` is not specified, newlines embedded inside quoted fields
529 will not be interpreted correctly, and on platforms that use ``\r\n`` linendings
R David Murray9c0d5ea2011-03-20 11:18:21 -0400530 on write an extra ``\r`` will be added. It should always be safe to specify
R David Murray1b00f252012-08-15 10:43:58 -0400531 ``newline=''``, since the csv module does its own
532 (:term:`universal <universal newlines>`) newline handling.