如何创建循环批量读取TXT文件并提取信息至Excel表格
批量处理HTML转TXT文件并汇总为Excel的R实现
实现思路
将单文件处理逻辑封装为可复用函数,遍历目标文件夹下所有TXT文件,逐个处理后合并结果,最终导出为单个Excel文件。
修改后的完整代码
# 设置工作目录(请替换为你的实际路径) wd <- "你的工作目录路径/" # 1. 获取目标文件夹下所有TXT文件的完整路径 fnames <- list.files(path = paste0(wd, "09_data_tables/Raster_layer_statistics"), pattern = "\\.txt$", # 仅匹配TXT格式文件 full.names = TRUE) # 2. 封装单文件处理函数 process_single_txt <- function(file_path) { # 读取TXT文件 my_tibble <- read_delim(file_path, delim = ":", escape_double = FALSE, col_names = FALSE, trim_ws = TRUE, skip = 1) # 转换为dataframe格式 my_df <- as.data.frame(my_tibble) # 清理第一列的<p>标签 my_df$X1 <- gsub('<p>', '', my_df$X1) # 截取第二列有效内容(移除末尾5个字符) my_df$X2 <- str_sub(my_df$X2, end = -5) # 重命名列名 colnames(my_df) <- c("Attribute", "Value", "X") # 处理第一行特殊逻辑:从第三列提取信息覆盖第二列 my_df[1,3] <- substring(my_df[1,3], 61) my_df[1,3] <- gsub("\\..*", "", my_df[1,3]) my_df[1,2] <- my_df[1,3] my_df <- my_df[,1:2] # 仅保留前两列 # 转换为宽格式数据表 my_df_wide <- my_df %>% pivot_wider(names_from = Attribute, values_from = Value) # 将指定列转换为数值型 cols <- names(my_df_wide)[2:9] my_df_wide[cols] <- lapply(my_df_wide[cols], as.numeric) my_df_wide <- as.data.frame(my_df_wide) # 提取Flight编号并清理文件名 my_df_wide$Flight <- as.numeric(gsub("([0-9]+).*$", "\\1", my_df_wide$`Analyzed file`)) my_df_wide$`Analyzed file` <- sub("^[^_]*_", "", my_df_wide$`Analyzed file`) return(my_df_wide) } # 3. 批量处理所有文件并合并结果 all_results <- lapply(fnames, process_single_txt) %>% bind_rows() # 4. 导出汇总结果到Excel write_xlsx(all_results, paste0(wd, "10_results/raster_layer_statistics汇总.xlsx"))
关键说明
- 函数封装:把原单文件处理逻辑打包成
process_single_txt函数,参数为文件路径,返回处理后的dataframe,便于批量调用 - 批量遍历:用
lapply遍历所有TXT文件路径,自动调用处理函数,生成所有文件的结果列表 - 结果合并:用
bind_rows将多个dataframe合并为一个汇总表,列名一致时自动对齐 - 文件过滤:添加
pattern = "\\.txt$"确保只处理TXT文件,避免误操作其他格式文件
内容的提问来源于stack exchange,提问作者user24977020
相关产品推荐
相关产品推荐

