Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 读取带有不匹配引号的文本文件_R_Csv - Fatal编程技术网

R 读取带有不匹配引号的文本文件

R 读取带有不匹配引号的文本文件,r,csv,R,Csv,我有一个大的(>1GB)CSV文件,我正试图读入R中的数据帧 非数字字段用双引号括起来,这样内部逗号就不会被解释为分隔符。那很好。但是,有时条目中也会出现不匹配的双引号,如“2”Nails” 解决这个问题的最佳方法是什么?我目前的计划是使用像awk这样的文本处理器,将引用字符从双引号“重新标记为不冲突的字符,如pipe。我查找引号字符的启发式方法是在逗号旁边加双引号: gawk '{gsub(/(^\")|(\"$)/,"|");gsub(/,\"/,",|");gsub(/\",/,"|,")

我有一个大的(>1GB)CSV文件,我正试图读入R中的数据帧

非数字字段用双引号括起来,这样内部逗号就不会被解释为分隔符。那很好。但是,有时条目中也会出现不匹配的双引号,如
“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+,$)