Navigation

The so-called CSV (Comma Separated Values) format is the most common import and
export format for spreadsheets and databases. CSV format was used for many
years prior to attempts to describe the format in a standardized way in
RFC 4180. The lack of a well-defined standard means that subtle differences
often exist in the data produced and consumed by different applications. These
differences can make it annoying to process CSV files from multiple sources.
Still, while the delimiters and quoting characters vary, the overall format is
similar enough that it is possible to write a single module which can
efficiently manipulate such data, hiding the details of reading and writing the
data from the programmer.

The csv module implements classes to read and write tabular data in CSV
format. It allows programmers to say, “write this data in the format preferred
by Excel,” or “read data from this file which was generated by Excel,” without
knowing the precise details of the CSV format used by Excel. Programmers can
also describe the CSV formats understood by other applications or define their
own special-purpose CSV formats.

Return a reader object which will iterate over lines in the given csvfile.
csvfile can be any object which supports the iterator protocol and returns a
string each time its __next__() method is called — file objects and list objects are both suitable. If csvfile is a file object,
it should be opened with newline=''. 1 An optional
dialect parameter can be given which is used to define a set of parameters
specific to a particular CSV dialect. It may be an instance of a subclass of
the Dialect class or one of the strings returned by the
list_dialects() function. The other optional fmtparams keyword arguments
can be given to override individual formatting parameters in the current
dialect. For full details about the dialect and formatting parameters, see
section Dialects and Formatting Parameters.

Each row read from the csv file is returned as a list of strings. No
automatic data type conversion is performed unless the QUOTE_NONNUMERIC format
option is specified (in which case unquoted fields are transformed into floats).

Return a writer object responsible for converting the user’s data into delimited
strings on the given file-like object. csvfile can be any object with a
write() method. If csvfile is a file object, it should be opened with
newline=''1. An optional dialect
parameter can be given which is used to define a set of parameters specific to a
particular CSV dialect. It may be an instance of a subclass of the
Dialect class or one of the strings returned by the
list_dialects() function. The other optional fmtparams keyword arguments
can be given to override individual formatting parameters in the current
dialect. For full details about the dialect and formatting parameters, see
section Dialects and Formatting Parameters. To make it
as easy as possible to interface with modules which implement the DB API, the
value None is written as the empty string. While this isn’t a
reversible transformation, it makes it easier to dump SQL NULL data values to
CSV files without preprocessing the data returned from a cursor.fetch* call.
All other non-string data are stringified with str() before being written.

Associate dialect with name. name must be a string. The
dialect can be specified either by passing a sub-class of Dialect, or
by fmtparams keyword arguments, or both, with keyword arguments overriding
parameters of the dialect. For full details about the dialect and formatting
parameters, see section Dialects and Formatting Parameters.

Create an object that operates like a regular reader but maps the
information in each row to an OrderedDict
whose keys are given by the optional fieldnames parameter.

The fieldnames parameter is a sequence. If fieldnames is
omitted, the values in the first row of file f will be used as the
fieldnames. Regardless of how the fieldnames are determined, the ordered
dictionary preserves their original ordering.

If a row has more fields than fieldnames, the remaining data is put in a
list and stored with the fieldname specified by restkey (which defaults
to None). If a non-blank row has fewer fields than fieldnames, the
missing values are filled-in with None.

All other optional or keyword arguments are passed to the underlying
reader instance.

Create an object which operates like a regular writer but maps dictionaries
onto output rows. The fieldnames parameter is a sequence of keys that identify the order in which values in the
dictionary passed to the writerow() method are written to file
f. The optional restval parameter specifies the value to be
written if the dictionary is missing a key in fieldnames. If the
dictionary passed to the writerow() method contains a key not found in
fieldnames, the optional extrasaction parameter indicates what action to
take.
If it is set to 'raise', the default value, a ValueError
is raised.
If it is set to 'ignore', extra values in the dictionary are ignored.
Any other optional or keyword arguments are passed to the underlying
writer instance.

Note that unlike the DictReader class, the fieldnames parameter
of the DictWriter class is not optional.

Analyze the given sample and return a Dialect subclass
reflecting the parameters found. If the optional delimiters parameter
is given, it is interpreted as a string containing possible valid
delimiter characters.

Instructs writer objects to never quote fields. When the current
delimiter occurs in output data it is preceded by the current escapechar
character. If escapechar is not set, the writer will raise Error if
any characters that require escaping are encountered.

Instructs reader to perform no special processing of quote characters.

To make it easier to specify the format of input and output records, specific
formatting parameters are grouped together into dialects. A dialect is a
subclass of the Dialect class having a set of specific methods and a
single validate() method. When creating reader or
writer objects, the programmer can specify a string or a subclass of
the Dialect class as the dialect parameter. In addition to, or instead
of, the dialect parameter, the programmer can also specify individual
formatting parameters, which have the same names as the attributes defined below
for the Dialect class.

Controls how instances of quotechar appearing inside a field should
themselves be quoted. When True, the character is doubled. When
False, the escapechar is used as a prefix to the quotechar. It
defaults to True.

On output, if doublequote is False and no escapechar is set,
Error is raised if a quotechar is found in a field.

A one-character string used by the writer to escape the delimiter if quoting
is set to QUOTE_NONE and the quotechar if doublequote is
False. On reading, the escapechar removes any special meaning from
the following character. It defaults to None, which disables escaping.

Return the next row of the reader’s iterable object as a list (if the object
was returned from reader()) or a dict (if it is a DictReader
instance), parsed according to the current dialect. Usually you should call
this as next(reader).

Writer objects (DictWriter instances and objects returned by
the writer() function) have the following public methods. A row must be
an iterable of strings or numbers for Writer objects and a dictionary
mapping fieldnames to strings or numbers (by passing them through str()
first) for DictWriter objects. Note that complex numbers are written
out surrounded by parens. This may cause some problems for other programs which
read CSV files (assuming they support complex numbers at all).

Since open() is used to open a CSV file for reading, the file
will by default be decoded into unicode using the system default
encoding (see locale.getpreferredencoding()). To decode a file
using a different encoding, use the encoding argument of open:

If newline='' is not specified, newlines embedded inside quoted fields
will not be interpreted correctly, and on platforms that use \r\n linendings
on write an extra \r will be added. It should always be safe to specify
newline='', since the csv module does its own
(universal) newline handling.