How to read a CSV line with "?

前端 未结 4 1442
刺人心
刺人心 2020-12-18 03:19

A trivial CSV line could be spitted using string split function. But some lines could have \", e.g.

\"good,morning\", 100, 300, \"1998,5,3\"
         


        
4条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-18 03:40

    There's a csv module in Python, which handles this.

    Edit: This task falls into "build a lexer" category. The standard way to do such tasks is to build a state machine (or use a lexer library/framework that will do it for you.)

    The state machine for this task would probably only need two states:

    • Initial one, where it reads every character except comma and newline as part of field (exception: leading and trailing spaces) , comma as the field separator, newline as record separator. When it encounters an opening quote it goes into
    • read-quoted-field state, where every character (including comma & newline) excluding quote is treated as part of field, a quote not followed by a quote means end of read-quoted-field (back to initial state), a quote followed by a quote is treated as a single quote (escaped quote).

    By the way, your concatenating solution will break on "Field1","Field2" or "Field1"",""Field2".

提交回复
热议问题