R 读取带有不匹配引号的文本文件
我有一个大的(>1GB)CSV文件,我正试图读入R中的数据帧 非数字字段用双引号括起来,这样内部逗号就不会被解释为分隔符。那很好。但是,有时条目中也会出现不匹配的双引号,如R 读取带有不匹配引号的文本文件,r,csv,R,Csv,我有一个大的(>1GB)CSV文件,我正试图读入R中的数据帧 非数字字段用双引号括起来,这样内部逗号就不会被解释为分隔符。那很好。但是,有时条目中也会出现不匹配的双引号,如“2”Nails” 解决这个问题的最佳方法是什么?我目前的计划是使用像awk这样的文本处理器,将引用字符从双引号“重新标记为不冲突的字符,如pipe。我查找引号字符的启发式方法是在逗号旁边加双引号: gawk '{gsub(/(^\")|(\"$)/,"|");gsub(/,\"/,",|");gsub(/\",/,"|,")
“2”Nails”
解决这个问题的最佳方法是什么?我目前的计划是使用像awk这样的文本处理器,将引用字符从双引号“
重新标记为不冲突的字符,如pipe
。我查找引号字符的启发式方法是在逗号旁边加双引号:
gawk '{gsub(/(^\")|(\"$)/,"|");gsub(/,\"/,",|");gsub(/\",/,"|,");print;}' myfile.txt > newfile.txt
是相关的,但解决方案(在
quote=”“
的read.csv
中的参数)对我来说是不可行的,因为我的文件在引号中包含非定界逗号。您的想法是在逗号旁边查找引号,这可能是您能做的最好的事情;但是,您可以尝试将其转过来,让正则表达式转义所有不在逗号(或行的开始/结束)旁边的引号:
寻找
(?<!^|,)"(?!,|$)
如果单元格中存在非边界逗号,这将是Tim解决方案的一个更简单的变体:
(?<!,\s+)"(?!\s+,$)
(?我不认为将所有“\”更改为“|”会有什么帮助。我认为您可能需要一个正则表达式解决方案(可能是在awk中实现的),该解决方案将找到类似以下内容的实例:“,”\“[^,]{0,}\”[^,]{0,}\,",即逗号之间的三个双引号。@dwn请参见编辑。如果我将双引号改为管道,那么我可以在read.csv
中设置quote=''|'
。当然可以这样做,但您将遇到与当前相同的解析困难。请在一个小测试用例上尝试。在您的测试用例中,可能会出现错误两个有问题的双引号,一个在第一个dbl-quotes旁边。为什么需要多行选项?我在命令行中运行了此选项:perl-p-e/(?如果逐行运行命令,则不需要多行选项。但是如果已将整个文件读入$subject
,则确实需要它。
(?<!,\s+)"(?!\s+,$)