Python CSV 解析,转义引号字符

Posted

技术标签:

【中文标题】Python CSV 解析,转义引号字符【英文标题】:Python CSV Parsing, Escaped Quote Character 【发布时间】:2019-08-23 11:41:09 【问题描述】:

我正在尝试使用 csv.reader 解析 CSV 文件,我的数据用逗号分隔,每个值都以引号开头和结尾。示例:

"This is some data", "New data", "More \"data\" here", "test"

我的问题是第三个值,我得到的带有引号的数据有一个转义字符,表明它是数据的一部分。 python CSV 阅读器不使用此转义字符,因此会导致解析不正确。

我尝试了如下代码:

    with open(filepath) as csv_file:
        csv_reader = csv.reader(csv_file, delimiter=',', quotechar='\\"')

但我收到一条错误消息,抱怨 quotechar 不是 1 个字符。

我目前的解决方案是在用 csv.reader 解析之前用单引号 ' 替换所有字符 \" 字符 - 但是,我想知道是否有更好的方法而不修改原始数据。

【问题讨论】:

【参考方案1】:

这里的问题是您需要定义一个escapechar,以便csv阅读器知道将\“视为”。

csv.reader(csv_file, quotechar='"', delimiter=',', escapechar='\\')

【讨论】:

行得通!我正在阅读相同的文档很长一段时间,但不知道我是怎么错过的!我想我专注于错误的事情(quotechar)。谢谢。 这也应该有效:csv.reader(csv_file, delimiter=",", quotechar="\"")。至少在我的情况下它不会抱怨。 @格雷格你更快xD @BCJuan 我确实先尝试了“\””,但这并没有奏效,因为它实际上只是通过了一个单引号并导致相同的解析错误。要获得反斜杠,您必须输入首先在两个 \\ 反斜杠中,但随后它会抱怨它不是一个字符。 我已经用例句试过了,它对我有用:/ @BCJuan,嗯,你是对的,我没有使用上面的样本集进行测试,而是使用我的实际数据集进行测试。使用示例集,您的方法似乎可行,但使用我的实际数据集则不行。我能看到的唯一其他区别是我的实际数据集还包括换行符,也许转义字符和换行符的组合是什么打破了它?

以上是关于Python CSV 解析,转义引号字符的主要内容,如果未能解决你的问题,请参考以下文章

使用相同的转义和引号字符分隔 CSV

使用 Python 的 csv.reader 处理转义引号

正确转义 CSV 中的双引号

将字符串写入 CSV 时转义逗号

php解析csv时,特定汉字会导致逗号识别不出来

Python Pandas to_csv,您可以使用.replace()抢先处理双引号转义问题[重复]