1

我有一个“CSV”,其中一些数据字段恰好包含逗号分隔符,如以下示例数据的第二行所示。

"1","stuff","and","things"
"2","black,white","more","stuff"

我无法更改源数据,我不知道如何 str.split() 并且不拆分值“黑色,白色”。

我解决问题的方法:

  1. 我查看了 partition() 并没有看到这对我有什么好处。
  2. 我确信正则表达式会正确捕获数据,但我不确定如何将其与拆分联系起来。
  3. 由于源中的每一行总是有相同数量的字段,我认为设置 maxsplit 可能会有所帮助,但我认为它仍然会在“黑色,白色”中分割,我最终会失去最后一个值(在这种情况下将是“东西”)。

当然,这很容易克服,所以我期待学习新的东西!

非常感谢您的帮助。

4

3 回答 3

2

使用csvStringIO

>>> import csv, StringIO
>>> data = """"1","stuff","and","things"
... "2","black,white","more","stuff"
... """
>>> reader = csv.reader(StringIO.StringIO(data))
>>> for row in reader:
...     print row
... 
['1', 'stuff', 'and', 'things']
['2', 'black,white', 'more', 'stuff']
于 2012-11-06T02:58:33.300 回答
1

如果您的源不是 CSV,并且您只想平衡字符串中的引号,您可以尝试使用 shlex 模块:

import shlex
lex = shlex.shlex('"2","black,white","more","stuff"')
for i in lex:
    print i
于 2012-11-06T02:35:51.983 回答
0

字符串外的逗号总是后跟双引号。只是分开,"而不是仅仅,(或什至","

>>> x = '"2","black,white","more","stuff"'
>>> x
'"2","black,white","more","stuff"'
>>> x.split(',"')
['"2"', 'black,white"', 'more"', 'stuff"']
>>> [y.strip('"') for y in x.split(',"')]
['2', 'black,white', 'more', 'stuff']

当然,编辑效率

YevgenYampolskiy 的建议shlex也是另一种选择。

>>> x = '"2","black,white","more","stuff"'
>>> x
'"2","black,white","more","stuff"'
>>> import shlex
>>> y = shlex.shlex(x)
>>> [i.strip('"') for i in y if i != ',']
['2', 'black,white', 'more', 'stuff']
于 2012-11-06T02:42:18.473 回答