python的csv读者可以留下引号吗?

Ham*_*ner 6 python csv quotes

我想使用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阅读器正在按预期工作,我的用例是滥用它,但是有什么方法可以将它弯曲到我的意愿吗?或者我是否必须编写自己的字符串解析器?

cwg*_*gem 5

您将不得不编写自己的解析器,因为支持解析和引号的模块部分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所以它添加了引号。