我想使用python CSV阅读器,但我想留下引号.这就是我想要的:
>>> s = '"simple|split"|test'
>>> reader = csv.reader([s], delimiter='|', skipinitialspace=True)
>>> reader.next()
['"simple|split"', 'test']
Run Code Online (Sandbox Code Playgroud)
但我实际得到:
['simple|split', 'test']
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我希望引用的字符串仍然被引用传递.
我知道CSV阅读器正在按预期工作,我的用例是滥用它,但是有什么方法可以将它弯曲到我的意愿吗?或者我是否必须编写自己的字符串解析器?
您将不得不编写自己的解析器,因为支持解析和引号的模块部分parse_process_char位于事物的 C 端,特别是位于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;
}
Run Code Online (Sandbox Code Playgroud)
那个“字段的引用结束部分”部分正在扼杀你的双引号。另一方面,您可能能够终止该else条件并重建 python 源代码。然而,老实说,这并不是所有可以维护的。
编辑:对不起,我的意思是添加else之前的最后一点,self->state = IN_FIELD所以它添加了引号。
| 归档时间: |
|
| 查看次数: |
1904 次 |
| 最近记录: |