You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R批量导入不同子目录CSV出现embedded nul in string错误如何解决

解决方案

报错原因

Agilent Chemstation导出的CSV默认使用UTF-16LE编码,R默认读取编码不匹配,才会识别出嵌入空字节触发警告。

实现步骤

1. 环境准备

加载所需工具包:

library(tidyverse)

2. 自定义读取函数

函数同时完成「读取适配编码的文件」、「提取所属子目录名」、「新增标识列」三个操作:

read_agilent_csv <- function(file_path) {
  # 拆分路径提取目标子目录名
  # 路径结构为:[1]一级目录/[2]二级目录/[3]三级目录/[4]REPORT01.CSV
  # 调整[]内的数字即可选择不同层级的目录作为标识:
  # 填1取最上层的210119/210122类目录,填3取REF TTO-xxx.D类目录
  sub_dir <- str_split(file_path, "/", simplify = TRUE)[, 1]
  
  # 读取文件,指定编码匹配Chemstation导出规则
  df <- read_csv(
    file = file_path,
    locale = locale(encoding = "UTF-16LE"),
    show_col_types = FALSE
  ) %>%
    mutate(文件所属子目录 = sub_dir) # 列名可自行修改
  
  return(df)
}

3. 批量读取合并所有文件

final_tbl <- tto_refs %>%
  map_dfr(read_agilent_csv)

异常兼容方案

如果仍有少量文件报空值错误,修改读取部分的代码,先过滤空字节再读取:

read_agilent_csv <- function(file_path) {
  sub_dir <- str_split(file_path, "/", simplify = TRUE)[, 1]
  # 先读取行并过滤空字节
  file_lines <- readLines(
    con = file_path,
    encoding = "UTF-16LE",
    skipNul = TRUE
  )
  df <- read_csv(file_lines, show_col_types = FALSE) %>%
    mutate(文件所属子目录 = sub_dir)
  return(df)
}

内容的提问来源于stack exchange,提问作者Phenomniverse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:24:04