python - 用python解析CSV中的困难字符串
问题描述
我正在为我的 Firefox 历史记录 CSV 构建解析器。它包括这样的行:
"2017-07-12 09:43:31","https://english.stackexchange.com/questions/26498/should-there-always-be-a-comma-after-therefore-however-etc","punctuation - Should there always be a comma after ""therefore","However" etc.? - English Language & Usage Stack Exchange"
有没有一种有效的方法来处理这个问题(例如使用一些匹配模板的工具)?从理论上讲,它应该可以解析,因为它总是"$DATE","$URL","$everything_else"
但是我不能使用普通的 CSV 解析器(行中有很多逗号)并且我的脚本只匹配 '","' 在这些情况下也失败了。
此外,第三个字段并不总是存在,格式为"$DATE","$URL"
. 但我认为那是一个小问题。
解决方案
可能有更好的方法来做到这一点,但正则表达式可以做到这一点:
import re
capture = re.findall(r"^\"([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2})\",\"([^\"]+)\",?(.+)?$",csv_string)
它返回一个列表列表(下面的示例)。
[('2017-07-12 09:43:31', 'https://english.stackexchange.com/questions/26498/should-there-always-be-a-comma-after-therefore-however-etc', '"punctuation - Should there always be a comma after ""therefore","However" etc.? - English Language & Usage Stack Exchange"')]
根据您要对数据执行的操作,您可能需要从那里提出一个额外的处理程序。如果i
代表您的行号,您可以通过以下方式访问信息:list_for_line[i][0]
对于时间戳;list_for_line[i][1]
对于网址;和list_for_line[i][2]
描述。
推荐阅读
- google-bigquery - 在 where 子句 Bigquery 中使用聚合函数更新表
- jenkins - Kubernetes Pod 模板 Pre Pod,Service,Deployment yaml 文件
- javascript - Computer Guess A Number JavaScript
- javascript - Lambda forgot how to interpret JavaScript?
- terraform - 如何在 Terraform 存储桶策略中使用存储桶作为变量?
- php - PHP重新排序数组中的数组序列
- java - Spring boot application not starting on Tomcat
- java - getResourceAsStream 返回具有正确路径的 null
- reactjs - 如何检查数组是否具有相同的对象 React Native
- c - sprintf_s 和访问冲突