如何在R中正确读取含单双引号混合的CSV文件
解决特殊格式CSV的读取问题
针对你遇到的每行首尾带单引号、内部字符串用双引号包裹的CSV文件,这里提供两种高效的处理方案:
方案一:先读取行再清理首尾单引号(推荐)
这种方法先把所有行读入内存,移除首尾的单引号后再解析成数据框,能完美保留内部带逗号的字符串结构:
方法1(用stringr包,更直观)
# 如果没装stringr先安装 # install.packages("stringr") library(stringr) library(readr) # 读取所有行 raw_lines <- read_lines("你的文件路径.csv") # 移除每行开头和结尾的单引号 cleaned_lines <- str_remove_all(raw_lines, "^'|'$") # 将清理后的文本解析为数据框 final_df <- read_csv(I(cleaned_lines), quote = '"')
方法2(用base R,无需额外包)
如果不想安装新包,用base R的sub函数也能实现:
library(readr) raw_lines <- readLines("你的文件路径.csv") # 用正则匹配首尾单引号并替换为空 cleaned_lines <- sub("^'(.*)'$", "\\1", raw_lines) final_df <- read_csv(I(cleaned_lines), quote = '"')
方案二:读取时直接跳过首尾单引号(进阶)
如果你不想先读所有行,也可以尝试用read_delim指定更灵活的规则,但实际测试下来方案一的兼容性和稳定性更好。比如通过自定义quote参数结合正则,但这种方式对复杂格式的容错率较低,不优先推荐。
测试验证
假设你的CSV行是这种格式:
'name,"description,with,commas",value'
清理后会变成:
name,"description,with,commas",value
此时read_csv会正确识别3列,其中第二列的内部逗号不会被当成分隔符。
内容的提问来源于stack exchange,提问作者amitte
相关产品推荐
相关产品推荐

