split CSV fields
John Machin
sjmachin at lexicon.net
Thu Nov 16 06:00:30 EST 2006
Fredrik Lundh wrote:
> robert wrote:
>
> > What is a most simple expression for splitting a CSV line
> > with "-protected fields?
> >
> > s='"123","a,b,\"c\"",5.640'
>
> import csv
>
> the preferred way is to read the file using that module. if you insist
> on processing a single line, you can do
>
> cols = list(csv.reader([string]))
>
> </F>
Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit
(Intel)] on win32
| >>> import csv
| >>> s='"123","a,b,\"c\"",5.640'
| >>> cols = list(csv.reader([s]))
| >>> cols
[['123', 'a,b,c""', '5.640']]
# maybe we need a bit more:
| >>> cols = list(csv.reader([s]))[0]
| >>> cols
['123', 'a,b,c""', '5.640']
I'd guess that the OP is expecting 'a,b,"c"' for the second field.
Twiddling with the knobs doesn't appear to help:
| >>> list(csv.reader([s], escapechar='\\'))[0]
['123', 'a,b,c""', '5.640']
| >>> list(csv.reader([s], escapechar='\\', doublequote=False))[0]
['123', 'a,b,c""', '5.640']
Looks like a bug to me; AFAICT from the docs, the last attempt should
have worked.
Cheers,
John
More information about the Python-list
mailing list