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

如何通过名称匹配自动合并两个目录下的TXT文件并导出?

解决思路与完整代码实现

先给你修正现有代码里的语法问题,比如字符串拼接的括号没闭合、gsub的括号缺失,还有第二个循环里误用了ls[i](应该是ls1[i]),调整后的基础导入代码更规范:

# 定义两个目录的路径(替换成你的实际路径)
dir1_path <- "C:/directory1"
dir2_path <- "C:/directory2"

# 获取两个目录下的txt文件列表(只匹配以.txt结尾的文件)
ls <- list.files(dir1_path, pattern = "\\.txt$", full.names = FALSE)
ls1 <- list.files(dir2_path, pattern = "\\.txt$", full.names = FALSE)

# 导入目录1的文件到列表,用去掉后缀的文件名作为列表元素名
get <- list()
for(i in 1:length(ls)){
  file_path <- file.path(dir1_path, ls[i])  # 用file.path自动处理路径分隔符,比paste更安全
  import <- read.table(file = file_path, sep = "")
  get[[gsub("\\.txt$", "", ls[i])]] <- import  # 修正括号缺失问题
}

# 导入目录2的文件到列表,同理处理
get2 <- list()
for(i in 1:length(ls1)){
  file_path <- file.path(dir2_path, ls1[i])
  import <- read.table(file = file_path, sep = "")
  get2[[gsub("\\.txt$", "", ls1[i])]] <- import  # 修正原代码误用ls[i]的问题
}

下一步:自动匹配合并并保存文件

接下来我们要找出两个列表中名称完全一致的文件(也就是去掉后缀后的名字相同的),然后逐个合并,最后保存为新的TXT文件:

# 获取两个列表的共同元素名——这就是我们要匹配的文件对
common_names <- intersect(names(get), names(get2))

# 先判断有没有匹配的文件,避免空循环
if(length(common_names) == 0){
  stop("没有找到匹配的文件,请检查两个目录下的文件名是否一致!")
}

# 创建保存合并后文件的目录(如果不存在的话)
output_dir <- "C:/merged_files"
if(!dir.exists(output_dir)){
  dir.create(output_dir)
}

# 循环处理每一对匹配的文件
for(name in common_names){
  # 合并数据:这里用rbind按行合并,如果你需要按列合并就换成cbind
  merged_data <- rbind(get[[name]], get2[[name]])
  
  # 设置输出文件的路径和名称
  output_file <- file.path(output_dir, paste0(name, "_merged.txt"))
  
  # 保存合并后的文件,参数可按需调整
  write.table(merged_data, file = output_file, sep = "", row.names = FALSE, col.names = FALSE)
  
  # 打印进度提示,方便你查看处理情况
  cat("已完成合并并保存:", output_file, "\n")
}

几个关键细节说明:

  • 合并方式:默认用rbind(按行合并),适合两个文件是同结构、不同行的数据;如果是同结构不同列的需求,直接把rbind换成cbind即可。
  • 保存参数:row.names = FALSE和col.names = FALSE是避免保存时自动添加行名/列名,如果你需要保留这些信息,可以去掉这两个参数。
  • 文件名匹配:用intersect精准筛选两个目录都存在的文件,避免出现找不到对应文件的报错。

这样整个流程就完整啦,从导入文件、自动匹配,到合并保存都能自动完成~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:11:07