8

私はpython CSVリーダーを使いたいのですが、引用符を残しておきたいのです。それは私が欲しいです:

>>> s = '"simple|split"|test'
>>> reader = csv.reader([s], delimiter='|', skipinitialspace=True)
>>> reader.next()
['"simple|split"', 'test']

しかし、私は実際に得ます:

['simple|split', 'test']

私の場合、引用された文字列が引用されたまま渡されるようにします。

CSV リーダーが意図したとおりに機能していることはわかっており、私のユース ケースはそれを悪用したものですが、それを自分の意志に曲げる方法はありますか? または、独自の文字列パーサーを作成する必要がありますか?

4

2 に答える 2

5

独自のパーサーを作成する必要があります。解析と引用符をサポートするモジュールの一部は 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 ソース コードを再構築できる場合もあります。ただし、正直に言うと、それだけでは維持できません。

編集:申し訳ありませんが、前回のビットを追加するつもりelseだったself->state = IN_FIELDので、引用を追加します。

于 2013-03-08T13:58:41.060 に答える