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

如何在R中批量处理多CSV文件识别空值并生成日志

批量CSV文件列数据质量检查方案

需求说明

我有多个列数不同的.csv文件,目前已有R代码可对单个文件的各列有效值、空值数量做质量检查且运行正常。需要修改代码实现批量处理所有CSV文件,输出每个文件的统计结果,并生成日志文件。

现有代码

install.packages("readr") 
library(readr)

check_column <- function(df, column) {
  valid_values <- !is.na(df[[column]])
  num_valid <- sum(valid_values)
  num_null <- nrow(df) - num_valid
  return(c(num_valid, num_null))
}

#Read the CSV file
df <- read_csv("data.csv")

for (column in names(df)) {
  results <- check_column(df, column)
  print(paste(column, ": ", results[1], " valid, ", results[2], " null"))
}

示例数据

Csv1.csv

D_T  Temp (°C)  Press (Pa)  ...
2021-03-01 00:00:00+00  28  1018  ...
2021-03-02 00:00:00+00  27  1017  ...
2021-03-03 00:00:00+00  28  1019  ...
..
.. 

Csv2.csv

D_T  Temp (°C)  Vel (m/s)  Press (Pa) ...
2022-03-01 00:00:00+00  28  118  1018  ...
2022-03-02 00:00:00+00  27  117  1019  ...
2022-03-03 00:00:00+00  28  119  1018  ...
..
.. 

修改后的批量处理代码

# 加载所需包(仅首次安装需要运行install.packages)
# install.packages("readr")
library(readr)

# 定义列检查函数(保留原逻辑)
check_column <- function(df, column) {
  num_valid <- sum(!is.na(df[[column]]))
  num_null <- nrow(df) - num_valid
  return(c(num_valid, num_null))
}

# 定义批量处理函数
batch_check_csv <- function(csv_dir = ".", log_file = "csv_quality_check.log") {
  # 获取指定目录下所有CSV文件路径
  csv_files <- list.files(path = csv_dir, pattern = "\\.csv$", full.names = TRUE)
  
  if (length(csv_files) == 0) {
    message("未找到任何CSV文件")
    return(NULL)
  }
  
  # 初始化日志连接,同时输出到控制台和日志文件
  sink(log_file, append = FALSE, split = TRUE)
  
  # 遍历每个CSV文件
  for (file_path in csv_files) {
    cat("=== 开始处理文件:", basename(file_path), " ===\n", sep = "")
    cat("文件路径:", file_path, "\n")
    
    # 读取CSV文件并处理异常
    tryCatch({
      df <- read_csv(file_path, show_col_types = FALSE)
      cat("文件总行数:", nrow(df), "\n\n")
      
      # 遍历所有列进行检查
      for (column in names(df)) {
        results <- check_column(df, column)
        result_line <- paste(column, ": ", results[1], " 有效值, ", results[2], " 空值", sep = "")
        cat(result_line, "\n")
      }
      
    }, error = function(e) {
      error_msg <- paste("处理文件", basename(file_path), "时出错:", e$message)
      cat(error_msg, "\n")
    })
    
    cat("\n========================================\n\n")
  }
  
  # 关闭日志连接
  sink()
  message("批量处理完成,日志已保存至:", log_file)
}

# 执行批量处理(默认处理当前目录下所有CSV,日志保存为csv_quality_check.log)
batch_check_csv()

# 如需指定目录,可调用:batch_check_csv(csv_dir = "你的CSV文件夹路径")

代码说明

  • 批量文件识别:通过list.files筛选指定目录下所有.csv后缀的文件,无需手动逐个指定
  • 双渠道输出:使用sink函数同时将结果输出到控制台和日志文件,兼顾实时查看与事后回溯需求
  • 异常防护:tryCatch捕获文件读取或处理中的错误,避免单个文件失败导致整个批量任务中断
  • 兼容性:保留原有列检查逻辑,自动适配不同列数、不同列名的CSV文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 16:23:28