我想使用 python CSV 阅读器,但我想保留引号。这就是我想要的:
>>> s = '"simple|split"|test'
>>> reader = csv.reader([s], delimiter='|', skipinitialspace=True)
>>> reader.next()
['"simple|split"', 'test']
但我实际上得到:
['simple|split', 'test']
就我而言,我希望引用的字符串仍被引用。
我知道 CSV 阅读器正在按预期工作,而我的用例是对它的滥用,但是有什么方法可以让它符合我的意愿吗?或者我必须编写自己的字符串解析器?
您将必须编写自己的解析器,因为支持解析和引用的模块部分位于 C 方面,特别是parse_process_char
位于Modules/_csv.c
:
else if (c == dialect->quotechar &&
dialect->quoting != QUOTE_NONE) {
if (dialect->doublequote) {
/* doublequote; " represented by "" */
self->state = QUOTE_IN_QUOTED_FIELD;
}
else {
/* end of quote part of field */
self->state = IN_FIELD;
}
}
else {
/* normal character - save in field */
if (parse_add_char(self, c) < 0)
return -1;
}
“字段的引用部分结束”部分是在咀嚼双引号。另一方面,你也许可以杀死它else
有条件并重建 python 源代码。然而,说实话,这并不是那么容易维护。
Edit:抱歉,我的意思是添加最后的部分else
before self->state = IN_FIELD
所以它添加了引号。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)