R语言write_delim处理带双引号字符串时出现重复引号如何解决
R使用write_delim写入带双引号字符串时引号重复问题
问题复现
执行以下代码即可复现异常:
regel <- 'string with "double" quotes in it' uit <- data.frame(regel) write_delim(uit,"test.file",col_names=FALSE, quote = "none")
生成的test.file文件实际内容为:
string with ""double"" quotes in it
即使设置quote = "none"参数,原字符串内的双引号仍被输出为两个连续双引号,和原始内容不符。
原因说明
这是readr包中write_delim及同系列写入函数(write_csv/write_tsv等)的固有逻辑:quote参数仅控制是否给每个字段整体包裹外层双引号,无论该参数设置为何值,函数默认都会对字段内部的双引号做双写转义,因此仅设置quote = "none"无法关闭内部引号的转义行为。
解决方案
- 方案1:追加
escape = "none"参数,关闭所有自动转义逻辑
调整后的写入代码:
执行后输出文件内容和原字符串完全一致:write_delim(uit,"test.file",col_names=FALSE, quote = "none", escape = "none")string with "double" quotes in it - 方案2:使用R基础包的
writeLines直接写入原始字符串,跳过分隔符格式化逻辑,适合纯文本写入场景:writeLines(uit$regel, "test.file")
注意:如果需要输出符合通用规范的CSV/TSV文件,关闭转义会导致文件格式不标准,后续用常规分隔符读取函数解析时可能出现字段错位,仅在明确需要保留原始字符串、不需要兼容标准格式规则时使用上述方案。
内容的提问来源于stack exchange,提问作者Ton de Haan
相关产品推荐
相关产品推荐

