python - 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)
推荐阅读
- php - 致命错误:找不到类“BUILDR_OPTIONS”
- android - 无法启动守护进程我已经尝试了很多东西..我使用的是 android 3.0.1
- php - 如何为 php-jwt 生成密钥对?
- django - Django - 在复选框上使用 {% for field in form %},导致字段生成所有替代项
- rxjs - 来自 JS Map 的 RxJS 的流生成器
- r - ggplot2:使用填充geom_bar指定颜色时缺少图例
- optimization - 固定格式源代码中的 Fortran 是否更易于编译器优化?
- sql-server - 随时与多个 SQL Server 通信
- azure-devops - 与 TFS 服务器的 VSTS 身份验证失败。请检查您的设置。TFS 代理错误
- python - 如何在整个子查询中使用 group_concat?