在R中导出独立CSV时保留原文件名及解决路径报错的问题
解决方案
问题分析
你遇到的核心问题:
- 第一个代码用
full.names = TRUE获取了带完整路径的文件名,导致后续生成文件时使用长路径作为文件名 - 第二个代码仅获取了文件名,但读取时未拼接子文件夹路径,R无法定位到文件
正确实现代码
根据你的需求,提供两种常见场景的解决方案:
场景1:读取文件后,保存为原文件名的独立CSV文件
如果需要读取文件(可添加处理逻辑)后,用原文件名保存到当前工作目录:
# 定义目标文件夹路径 folder <- "C:/LongPathToFolder/feb28-jun20" # 获取符合规则的文件完整路径,同时提取原文件名 files <- list.files( path = folder, pattern = "_Bethel.*\\.csv$", # 正则匹配以_Bethel开头、.csv结尾的文件 ignore.case = FALSE, full.names = TRUE ) # 提取原文件名(去掉完整路径) original_names <- basename(files) # 循环处理每个文件 for (file_idx in seq_along(files)) { # 读取CSV文件 csv_data <- read.csv(files[file_idx], header = FALSE, sep = ",") # (可选)在这里添加你的数据处理代码 # 用原文件名保存CSV write.csv(csv_data, file = original_names[file_idx], row.names = FALSE) }
场景2:读取文件后,在R环境中创建以原文件名命名的变量
如果只是想把每个CSV读入R,并用原文件名(去掉.csv后缀)作为变量名:
folder <- "C:/LongPathToFolder/feb28-jun20" files <- list.files( path = folder, pattern = "_Bethel.*\\.csv$", ignore.case = FALSE, full.names = TRUE ) # 提取去掉后缀的原文件名作为变量名 var_names <- tools::file_path_sans_ext(basename(files)) for (file_idx in seq_along(files)) { csv_data <- read.csv(files[file_idx], header = FALSE, sep = ",") # 将数据赋值给对应变量名 assign(var_names[file_idx], csv_data) }
你的第二个代码报错原因及修正
你用list.files("feb28-jun20")得到的是子文件夹内的文件名(比如test.csv),但read.csv默认在当前工作目录查找文件,而文件实际在feb28-jun20子文件夹中,需要拼接路径才能定位:
files2 <- list.files("feb28-jun20", pattern = ".*\\.csv$") for (i in seq_along(files2)) { # 用file.path拼接子文件夹和文件名 read.csv(file.path("feb28-jun20", files2[i]), header = FALSE, sep = ",") }
内容的提问来源于stack exchange,提问作者Mayra V
相关产品推荐
相关产品推荐

