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

R语言循环处理csv文件时write_parquet重复覆盖文件如何解决

R语言循环处理CSV输出Parquet文件覆盖问题解决方案

核心问题原因

现有代码输出路径写为固定字符串'E:/P/i.parquet',循环变量i被识别为普通字符而非变量,所有循环都写入同一个文件导致覆盖。

修改后可运行代码

rm(list = ls())
gc()

# 加载依赖包
require("data.table")
require("arrow")

# 定义路径参数,避免硬编码重复修改
input_dir <- "E:/TransferComplete/07/"
output_dir <- "E:/P/"

# 读取所有csv文件,正则匹配避免误判其他格式文件
files <- list.files(path = input_dir, pattern = "\\.csv$", full.names = FALSE)

for (i in files){
  loopStart <- Sys.time()
  
  # 读取CSV指定列
  bb <- fread(file.path(input_dir, i),
              header = TRUE,
              sep = ",", 
              data.table = FALSE, 
              stringsAsFactors = FALSE,
              select = c("x","y","z"))
  
  # 生成输出文件名:替换原CSV后缀为Parquet,保留原文件名
  output_filename <- gsub("\\.csv$", ".parquet", i)
  output_full_path <- file.path(output_dir, output_filename)
  
  # 写入Parquet文件
  write_parquet(bb, output_full_path)
  
  loopEnd <- Sys.time()
  loopTime <- round(as.numeric(loopEnd) - as.numeric(loopStart), 0)
  # 可选:打印进度,方便排查问题
  message("已完成文件:", i, ",耗时:", loopTime, "秒")
  
  # 清理本次循环内存占用
  rm(bb)
  gc()
}

优化说明

  • 统一管理输入输出路径,避免循环内重复调用setwd导致工作目录混乱
  • 使用file.path()拼接路径,自动适配不同操作系统的路径分隔符规则
  • list.files()添加正则匹配规则,仅匹配后缀为.csv的文件,避免误读取其他格式文件
  • 循环结束后清理本次读取的数据集再执行内存回收,效率更高
  • 新增进度打印逻辑,出现异常时可快速定位到出错的文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:54:03