如果我有一个字符串
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']
元素 'a string|12345|"today,tomorrow-nextweek 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)
关于Python csv阅读器忽略作为字符串一部分的双引号内的分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58551765/