【发布时间】:2017-12-04 05:46:30
【问题描述】:
如何拆分逗号分隔符字符串。字符串是一系列以逗号分隔的数字和单词。单词用单引号引起来,而数字则不用。单词可能包含非分隔逗号,在引号内应该没问题。单词可能包含其他类型的引号,这些引号必须由前面的反斜杠转义,如下所示:
'','some-mail@some-domain.org','f4c1bfd5-969d-\'4,7\"2a-,b1\'29-42de49eb4406',2827,1378614418
我曾尝试使用正则表达式 [^\'] 进行拆分,但这也会提取转义的逗号。
我尝试按字面意思计算字符作为替代方案,但这非常慢。
如果字符串中有转义的斜杠,python 的csv 阅读器也会在非定界逗号上拆分字符串。也许它不是有效的 CSV?
我应该得到的子字符串列表是:
[
'', # empty string
'some-mail@some-domain.org', # text like email
'f4c1bfd5-969d-\'4,7\"2a-,b1\'29-42de49eb4406', # text, comma and escaped quotes
2827, # number
1378614418 # number
]
这就是我使用 csv 模块的方式:
reader = csv.reader(StringIO(values_string), delimiter=',', quotechar="'", quoting=csv.QUOTE_ALL,skipinitialspace=True)
但我明白了:
['', 'some-mail@some-domain.org', 'f4c1bfd5-969d-\\4', '7\\"2a-', "b1\\'29-42de49eb4406'", '2827', '1378614418']
【问题讨论】:
-
将标准库中的
csvmodule 与适当的方言和/或格式参数一起使用。看来您可以使用默认值,但将引号字符从"更改为'。 -
@Blurp - 如果 csv 阅读器包含转义引号,则 csv 阅读器会在逗号中拆分它们
-
如果您正确设置选项则不会
-
这些数据的来源是什么?您是如何阅读的?
-
我已经包含了我如何使用 csv 模块进行解析的 sn-p。如果我没有正确的选择,请赐教。