【问题标题】:Python CSV Parsing, Escaped Quote CharacterPython CSV 解析,转义引号字符
【发布时间】: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 解析之前用单引号 ' 替换所有字符 \" 字符 - 但是,我想知道是否有更好的方法而不修改原始数据。

【问题讨论】:

    标签: python csv parsing


    【解决方案1】:

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

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

    【讨论】:

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