如何阅读包含转义引号的引用文本

时间:2011-05-17 14:24:38

标签: r escaping quotes multiline read.csv

考虑以下逗号分隔文件。为简单起见,让它包含一行:


'I am quoted','so, can use comma inside - it is not separator here','but can\'t use escaped quote :=('

如果您尝试使用

命令读取它
table <- read.csv(filename, header=FALSE)

该行将分为4个部分,因为行包含3个逗号。实际上我只想读3个部分,其中一个部分包含逗号本身。引用标志来寻求帮助。我试过了:

table <- read.csv(filename, header=FALSE, quote="'")

但是错误"incomplete final line found by readTableHeader on table"。这是因为奇数(七)引号。

read.table()以及scan()都有参数allowEscapes,但将其设置为TRUE无济于事。没关系,因为help(scan)你可以阅读:

  

解释的转义是控制字符             '\ a,\ b,\ f,\ n,\ r,\ t,\ v',...     ......其他任何逃脱的             字符被视为自身,包括反斜杠

请建议您如何阅读此类带引号的csv文件,其中包含转义的\'引号。

2 个答案:

答案 0 :(得分:5)

一种可能性是使用readLines()将所有内容按原样读入,然后通过用其他内容替换引号字符来继续,例如:

tt <- readLines("F:/temp/test.txt")
tt <- gsub("([^\\]|^)'","\\1\"",tt) # replace ' by "
tt <- gsub("\\\\","\\",tt) # get rid of the double escape due to readLines

这允许您使用textConnection

读取向量tt
zz <- textConnection(tt)
read.csv(zz,header=F,quote="\"") # give text input
close(zz)

不是最漂亮的解决方案,但是它有效(如果您在文件的某个位置没有“字符...”)

答案 1 :(得分:0)

reader 中的

read_delim可以使用参数escape_doubleescape_backslash处理转义的引号。

read_delim(file, delim=',', escape_double=FALSE, escape_backslash=TRUE, quote="'")

(请注意,较早版本的readr不正确地在CSV标头中支持带引号的换行符:https://github.com/tidyverse/readr/issues/784