Writing list of dictionaries to CSV
Tim Chase
python.list at tim.thechases.com
Wed May 6 14:37:12 EDT 2015
On 2015-05-06 12:27, Ian Kelly wrote:
> On Wed, May 6, 2015 at 12:22 PM, Tim Chase
> <python.list at tim.thechases.com> wrote:
> > On 2015-05-06 19:08, MRAB wrote:
> >> You could tell it to quote any value that's not a number:
> >>
> >> w = csv.DictWriter(f, pol_keys,
> >> quoting=csv.QUOTE_NONNUMERIC)
> >>
> >> It looks like all of the values you have are strings, so they'll
> >> all be quoted.
> >>
> >> I would hope that Excel will then treat it as a string; it would
> >> be stupid if it didn't! :-)
> >
> > Sadly, Excel *is* that stupid based on the tests I tried just
> > now. :-(
> >
> > Regardless of whether "Mar 2015" is quoted or unquoted in the
> > source CSV file, Excel tries to outwit you and mangles the
> > presentation.
>
> Quoting a value in csv doesn't mean it's a string; it just means
> that it's a single field.
>
> You *can* force Excel to treat a value as a string by prefixing it
> with an apostrophe, though.
Excel takes the apostrophe in the CSV file and puts it in the
content, rather than stripping it as an escape/formatting character:
c:\temp> type test.csv
"'Mar 2015",Mar 2015,3,2015
"Apr 2015",Apr 2015,4,2015
"2015-12",2015-12,12,2015
c:\temp> start test.csv
A1 has the unformatted text, but includes the apostrophe in the
value. B1, A2, and B2 get munged like the OP described to the form
"Apr-15". The items in row #3 come through untouched.
At least on Excel 2003 on WinXP which is what I happen to have on
hand.
-tkc
More information about the Python-list
mailing list