【问题标题】:fread escapes quotes when not necessaryfread 在不需要时转义引号
【发布时间】:2017-05-09 11:41:00
【问题描述】:

我正在使用 fread 函数读取带有引用字段的 csv 文件。在某些字段中出现转义引号 (\")。我不明白为什么fread 函数会转义这些已经转义的引号。

我用一个简单的例子重现了这种行为。我创建了一个包含一行和一个字段的文件:

"Hello \"World\" "

如果我运行以下 R 命令:

table <- fread(input = "/tmp/quoteprova.csv", header=FALSE, sep = "\t")

表变量将如下所示:

                  V1
1: Hello \\"World\\" 

我希望得到这个结果:

                V1
1: Hello \"World\" 

我是否缺少指定一些选项以获得预期的行为?

【问题讨论】:

    标签: r csv escaping fread quote


    【解决方案1】:

    你得到你想要的。 \\" 是两个字符:一个普通字符 \ 和一个 "。因为\ 用于转义特殊字符,而\* 将被解释为使用\ 转义的特殊字符。所以这里额外的\(第一个)会告诉你第二个\不是用来转义",应该按原样处理。

    看这个例子:

    > nchar('\\"')
    [1] 2
    > nchar('\"')
    [1] 1
    

    还有this R faq

    【讨论】:

    • 感谢您的回答。但我不同意。如果 fread 正在读取字段被双引号括起来的 csv 文件,那么它应该期望在该 csv 文件中字段内的双引号已经被转义(否则它无法正确读取文件)。因此,第二次转义双引号的 fread 函数没有意义
    • @rlar,原始答案中的链接不正确。请查看更新的链接。我们应该区分“字符串”和“字符串的表示”。 fread 没有再次逃脱。相反,R 转义了“\”,以便告诉您“\”只是一个“\”,而不是用来转义它后面的字符。
    猜你喜欢
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 2014-04-24
    • 2019-08-13
    相关资源
    最近更新 更多