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

Max*_*Max 11 quotes r escaping multiline read.csv

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


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

如果您尝试使用该命令读取它

table <- read.csv(filename, header=FALSE)
Run Code Online (Sandbox Code Playgroud)

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

table <- read.csv(filename, header=FALSE, quote="'")
Run Code Online (Sandbox Code Playgroud)

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

read.table()以及scan()有参数allowEscapes,但设置它TRUE没有帮助.没关系,因为help(scan)你可以阅读:

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

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

Jor*_*eys 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
Run Code Online (Sandbox Code Playgroud)

这允许您使用a读取向量tt textConnection

zz <- textConnection(tt)
read.csv(zz,header=F,quote="\"") # give text input
close(zz)
Run Code Online (Sandbox Code Playgroud)

不是最美丽的解决方案,但它的工作原理(前提是你的文件中没有"字符"...)

  • 我的意思是`tt < - readLines(file); tt < - gsub("\\\\'","''",tt); read.csv(textConnection(tt),header = FALSE,quote ="'")`导致双引号被正确读取(参见`?scan` - > Details - > quotes). (3认同)
  • 如果用`''替换'\'``那么`read.csv`将处理它. (2认同)