@@ -82,7 +82,8 @@ typedef enum {
8282} ParserState ;
8383
8484typedef enum {
85- QUOTE_MINIMAL , QUOTE_ALL , QUOTE_NONNUMERIC , QUOTE_NONE
85+ QUOTE_MINIMAL , QUOTE_ALL , QUOTE_NONNUMERIC , QUOTE_NONE ,
86+ QUOTE_STRINGS , QUOTE_NOTNULL
8687} QuoteStyle ;
8788
8889typedef struct {
@@ -95,6 +96,8 @@ static const StyleDesc quote_styles[] = {
9596 { QUOTE_ALL , "QUOTE_ALL" },
9697 { QUOTE_NONNUMERIC , "QUOTE_NONNUMERIC" },
9798 { QUOTE_NONE , "QUOTE_NONE" },
99+ { QUOTE_STRINGS , "QUOTE_STRINGS" },
100+ { QUOTE_NOTNULL , "QUOTE_NOTNULL" },
98101 { 0 }
99102};
100103
@@ -1264,6 +1267,12 @@ csv_writerow(WriterObj *self, PyObject *seq)
12641267 case QUOTE_ALL :
12651268 quoted = 1 ;
12661269 break ;
1270+ case QUOTE_STRINGS :
1271+ quoted = PyUnicode_Check (field );
1272+ break ;
1273+ case QUOTE_NOTNULL :
1274+ quoted = field != Py_None ;
1275+ break ;
12671276 default :
12681277 quoted = 0 ;
12691278 break ;
@@ -1659,6 +1668,11 @@ PyDoc_STRVAR(csv_module_doc,
16591668" csv.QUOTE_NONNUMERIC means that quotes are always placed around\n"
16601669" fields which do not parse as integers or floating point\n"
16611670" numbers.\n"
1671+ " csv.QUOTE_STRINGS means that quotes are always placed around\n"
1672+ " fields which are strings. Note that the Python value None\n"
1673+ " is not a string.\n"
1674+ " csv.QUOTE_NOTNULL means that quotes are only placed around fields\n"
1675+ " that are not the Python value None.\n"
16621676" csv.QUOTE_NONE means that quotes are never placed around fields.\n"
16631677" * escapechar - specifies a one-character string used to escape\n"
16641678" the delimiter when quoting is set to QUOTE_NONE.\n"
0 commit comments