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-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)

演示:https://repl.it/@blhsing/SplendidRichPyramid

关于Python csv阅读器忽略作为字符串一部分的双引号内的分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58551765/

相关文章:

python - 为什么 "Googletrans.Translator"突然停止工作?

python - 使用 matplotlib 在 x 轴上设置最小/最大年份

python - Python 脚本可以读/写的(CSV)文件大小是否有限制?

python - 在一个巨大的字符串文件中查找一个字符串

python - Keras:绘制模型时出现断言错误

python - 如何对大型数据集进行分组

python - 将命令重定向到 Python 中另一个的输入

linux - 在coldfusion中使用sqlldr将数据插入数据库

pandas - 将多个文件从 Google Cloud Storage 加载到单个 Pandas Dataframe 中

python - 打印报表在时限后消失