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

使用read.csv读取文件时如何忽略含特定名称的CSV文件

解决方案

你可以通过两种方式实现过滤带rerun关键词的文件,同时修正了原代码里的几处逻辑小问题:

方式1:直接在获取文件列表时过滤(推荐)

利用dir()函数支持的Perl正则规则,直接匹配所有不含rerun的csv文件,不需要额外加判断逻辑:

# 初始化列表存储每个文件的结果,比循环内逐次rbind效率高得多
result_list <- list()
file_path <- "/Users/jackdavis/Desktop/Results/"

# 正则规则:匹配文件名不含rerun、后缀为csv的所有文件
all_files <- dir(file_path, pattern = "^(?!.*rerun).*\\.csv$", recursive = TRUE, perl = TRUE)

for (i in seq_along(all_files)) {
  f <- all_files[i]
  print(f)
  tmp <- read.csv(paste0(file_path, f))
  result_list[[i]] <- data.frame(
    ID = f,
    Date = tmp$TEST_DATE,
    Time = tmp$TEST_TIME,
    Machine = tmp$DEVICE,
    Op = tmp$OPERATOR,
    PTC = tmp$SAMPLECODE # 原代码此处pcq为笔误,修正为读取的临时变量tmp
  )
}

# 最后统一合并所有文件的结果
test <- do.call(rbind, result_list)

方式2:在循环内加判断跳过目标文件

如果你不想修改匹配规则,也可以在循环开头加判断,遇到含rerun的文件直接跳过:

result_list <- list()
file_path <- "/Users/jackdavis/Desktop/Results/"
all_files <- dir(file_path, pattern = "\\.csv$", recursive = TRUE)

for (i in seq_along(all_files)) {
  f <- all_files[i]
  # 检测到文件名含rerun就直接进入下一轮循环
  if (grepl("rerun", f, ignore.case = FALSE)) {
    next
  }
  print(f)
  tmp <- read.csv(paste0(file_path, f))
  result_list[[i]] <- data.frame(
    ID = f,
    Date = tmp$TEST_DATE,
    Time = tmp$TEST_TIME,
    Machine = tmp$DEVICE,
    Op = tmp$OPERATOR,
    PTC = tmp$SAMPLECODE
  )
}

test <- do.call(rbind, result_list)

原代码问题说明

  • 原代码中每次循环用rbind(test, ...)赋值给test1,但没有更新test变量,最终只会保留最后一个文件的结果
  • 原代码里PTC=pcq$SAMPLECODE的pcq属于笔误,应该是读取的临时变量tmp
  • 循环内逐次rbind会不断复制内存,文件数量多的时候运行效率极低,用列表存储最后统一合并性能提升非常明显

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:27:07