我有一个示例中给出的字符串:

data = '02 JAN 2014,FEB 2014,A,1.00,,,""1,235.100000"",""1,230.00"",Column'


如何使用python的csv模块解析此字符串?

data = StringIO.StringIO(data)
reader = csv.reader(data, quoting=csv.QUOTE_NONE)


它将字符串""1,235.10000""分为两列:'""1''235.1000""'

我如何解决此问题,并安排模块使用双引号引起来不拆分逗号?

最佳答案

我不确定这是否足够好,但是:

>>> import csv
>>> data = '02 JAN 2014,FEB 2014,A,1.00,,,""1,235.100000"",""1,230.00"",Column'
>>> reader = csv.reader([data.replace('""', '|')], quotechar='|')
>>> next(reader)
['02 JAN 2014', 'FEB 2014', 'A', '1.00', '', '', '1,235.100000', '1,230.00', 'Column']


您可以使用StringIO或其他任何东西,但是传递列表可使示例代码更简单:)。如果实际上有一个文件对象,甚至可以使用一个简单的生成器来转换这些行,然后再将它们提供给阅读器:

def transform(file):
   for line in file:
       yield line.replace('""', '|')

with open('foo') as fin:
    reader = csv.reader(transform(fin), quotechar='|')
    ...


并且transform可以变得任意复杂-例如如果出于某种原因需要保留报价。

10-08 06:40