如何用"?"读取CSV行?

Yin*_*Zhu 6 python csv

可以使用字符串拆分功能对一个简单的CSV行进行吐出.但有些线路可能有",例如

"good,morning", 100, 300, "1998,5,3"
Run Code Online (Sandbox Code Playgroud)

因此直接使用字符串拆分不会解决问题.

我的解决方案是先使用,然后将字符串与字符串的"开头或结尾分开,然后将字符串组合起来.

这个问题的最佳做法是什么?

我很感兴趣,如果有一个Python或F#代码片段.

编辑:我对实现细节更感兴趣,而不是使用库.

Raf*_*ird 9

Python中有一个csv模块,可以处理这个问题.

编辑:此任务属于"构建词法分析器"类别.执行此类任务的标准方法是构建状态机(或使用将为您执行此操作的词法分析器库/框架.)

此任务的状态机可能只需要两种状态:

  • 初始值,它读取除逗号和换行符之外的每个字符作为字段的一部分(例外:前导和尾随空格),逗号作为字段分隔符,换行符作为记录分隔符.当它遇到一个开头的报价时,它会进入
  • read-quoted-field state,其中除引号之外的每个字符(包括逗号和换行符)都被视为字段的一部分,引号后面没有引号表示读取引用字段的结尾(返回初始状态),引用后跟着报价被视为单一报价(转义报价).

顺便说一句,你的连接解决方​​案将打破"Field1","Field2""Field1"",""Field2".

  • 与大多数解析问题一样,如果存在库,则使用库是更可持续的做法.如果OP真的对实现感兴趣,我确信Python库是开源的. (5认同)
  • 正如我们在Python社区中所说:"使用源代码,Luke".它完全开放,已经安装了Python.读它吧. (3认同)