Python csv读取器忽略作为字符串一部分的双引号内的分隔符

Python csv读取器忽略作为字符串一部分的双引号内的分隔符,python,csv,Python,Csv,如果我有一根绳子 s = 'some data in here, some more data in here, 0, a string|12345|"today,tomorrow-nextweek 6a-10a"|1234567, 2, 3.4, data string, string' 我如何阅读它,结果是这样的 ['some data in here', 'some more data in here', '0', 'a string|12345|"today,tomorrow-n

如果我有一根绳子

s = 'some data in here, some more data in here, 0, a string|12345|"today,tomorrow-nextweek 6a-10a"|1234567, 2, 3.4, data string, string'
我如何阅读它,结果是这样的

['some data in here',
 'some more data in here',
 '0',
 'a string|12345|"today,tomorrow-nextweek 6a-10a"|1234567',
 '2',
 '3.4',
 'data string',
 'string']
元素
“字符串| 12345 |”今天,明天下一个星期6a-10a“| 1234567”
不断被csv读取器分成两个元素,因为分隔符之间有双引号和另一个分隔符。我不确定是否有办法用csv.reader解决这个问题。我已经在字符串上尝试了以下操作,但没有效果

next(csv.reader(StringIO(s), quoting=csv.QUOTE_ALL, skipinitialspace=True))

next(csv.reader(StringIO(s), skipinitialspace=True))

next(csv.reader(StringIO(s), doublequote=True, quoting=csv.QUOTE_NONE, escapechar='\\', skipinitialspace=True))

这在
csv
模块支持的方言中是不可能的。您可以将
re.findall
与交替模式一起使用,该模式匹配双引号字符串或非逗号字符的重复,并使用前面的正向先行模式,以确保匹配以非空白开头:

import re
re.findall(r'(?=\S)(?:"[^"]*"|[^,])+', s)

演示:

这在
csv
模块支持的方言中是不可能的。您可以将
re.findall
与交替模式一起使用,该模式匹配双引号字符串或非逗号字符的重复,并使用前面的正向先行模式,以确保匹配以非空白开头:

import re
re.findall(r'(?=\S)(?:"[^"]*"|[^,])+', s)

演示:

您是否控制此字符串的来源?Python的
csv
模块不支持任何带有部分引用字段的方言。不幸的是,我受提供数据的公司api的支配。您是否控制此字符串的源?Python的
csv
模块不支持任何带有部分引用字段的方言。不幸的是,我受提供数据的公司api的支配