Python分裂与字段值的分隔符

时间:2012-11-06 02:27:19

标签: python split

我有一个" CSV"一些数据字段碰巧包含逗号分隔符,如下面的示例数据的第二行所示。

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

我无法更改源数据,因此我不知道如何使用str.split()而不会将值拆分为"黑色,白色和#34;。

我找到了解决问题的方法:

  1. 我查看了分区()并且没有看到这对我有什么好处。
  2. 我确定正则表达式会正确捕获数据,但我不确定如何将其绑定到拆分中。
  3. 由于源中的每一行总是会有相同数量的字段,我认为设置maxsplit会有所帮助,但我自己也会想到它仍会分裂在"黑色,白色和#34;我最终会失去最后一个值(在这种情况下,这将是"东西")。
  4. 当然这很容易克服,所以我期待着学习新东西!

    非常感谢您的帮助。

3 个答案:

答案 0 :(得分: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']

答案 1 :(得分:1)

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

import shlex
lex = shlex.shlex('"2","black,white","more","stuff"')
for i in lex:
    print i

答案 2 :(得分: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']