1

我有一个大 (>1GB) CSV 文件,我正在尝试读入 R 中的数据框。

非数字字段用双引号括起来,因此内部逗号不会被解释为分隔符。这很好。但是,有时条目中也会出现不匹配的双引号,例如"2" Nails".

解决此问题的最佳方法是什么?我目前的计划是使用像 awk 这样的文本处理器将双引号"中的引用字符重新标记为像 pipe 这样的非冲突字符|。我查找引用字符的启发式方法是逗号旁边的双引号:

gawk '{gsub(/(^\")|(\"$)/,"|");gsub(/,\"/,",|");gsub(/\",/,"|,");print;}' myfile.txt > newfile.txt 

这个问题是相关的,但解决方案(中read.csv的参数quote="")对我来说不可行,因为我的文件在引号中包含非定界逗号。

4

2 回答 2

2

您在逗号旁边寻找引号的想法可能是您能做的最好的事情;但是,您可以尝试将其转过来并让正则表达式转义所有不在 逗号旁边(或行首/行尾)的引号:

搜索

(?<!^|,)"(?!,|$)

并将所有匹配项替换为"".

R 可能不是最好的工具,因为它的正则表达式引擎没有多行模式,但在 Perl 中它将是单行的:

$subject =~ s/(?<!^|,)"(?!,|$)/""/mg;
于 2013-07-31T20:31:34.190 回答
0

如果单元格内存在非边界逗号,这将是蒂姆解决方案的一个更简单的变体:

(?<!,\s+)"(?!\s+,$)

我不确定它是否会有任何错误。

于 2018-12-01T13:37:53.707 回答