考虑以下逗号分隔文件。为简单起见,让它包含一行:
'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文件,其中包含转义的\'
引号。
答案 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
zz <- textConnection(tt)
read.csv(zz,header=F,quote="\"") # give text input
close(zz)
不是最漂亮的解决方案,但是它有效(如果您在文件的某个位置没有“字符...”)
答案 1 :(得分:0)
read_delim
可以使用参数escape_double
和escape_backslash
处理转义的引号。
read_delim(file, delim=',', escape_double=FALSE, escape_backslash=TRUE, quote="'")
(请注意,较早版本的readr不正确地在CSV标头中支持带引号的换行符:https://github.com/tidyverse/readr/issues/784)