R语言提取非结构化txt文件中多表格并导出至Excel的实现方法
R语言提取txt多表格并导出Excel实现方案
- 所需依赖包:
readr(读取文本行)、dplyr(数据处理)、stringr(字符串处理)、openxlsx(写入Excel文件)
# 安装依赖(首次运行执行) install.packages(c("readr", "dplyr", "stringr", "openxlsx")) # 加载依赖 library(readr) library(dplyr) library(stringr) library(openxlsx)
# 读取txt所有行,替换为你自己的data.txt实际路径 file_path <- "data.txt" all_lines <- read_lines(file_path, skip_empty_rows = TRUE) # 定位所有表格起始行位置 table_start_idx <- which(str_detect(all_lines, "^// TABLE ")) # 提取所有表格名称 table_names <- str_remove(all_lines[table_start_idx], "^// TABLE ") # 补充表格结束位置标识,方便截取内容 table_end_idx <- c(table_start_idx[-1] - 1, length(all_lines)) # 初始化存储所有表格的列表 table_list <- list() # 循环处理每个表格 for (i in seq_along(table_start_idx)) { # 截取当前表格的所有关联行 current_table_lines <- all_lines[table_start_idx[i]:table_end_idx[i]] # 提取列名:表格起始行的下一行,去掉前缀的//和空白符 col_line <- str_remove(current_table_lines[2], "^//\\s*") col_names <- str_split(col_line, "\\s+")[[1]] # 提取数据行:跳过前3行(TABLE标识行、列名行、字段类型行) data_lines <- current_table_lines[-c(1:3)] # 分割每行数据为独立字段 data_list <- lapply(data_lines, function(x) { str_split(str_trim(x), "\\s+")[[1]] }) # 转换为数据框并设置列名 df <- as.data.frame(do.call(rbind, data_list), stringsAsFactors = FALSE) colnames(df) <- col_names # 自动转换字段类型,可根据需求替换为自定义类型转换逻辑 df <- type.convert(df, as.is = TRUE) # 存入列表,名称对应Excel的sheet名 table_list[[table_names[i]]] <- df } # 导出为Excel文件,每个表格对应一个独立sheet write.xlsx(table_list, file = "表格提取结果.xlsx", overwrite = TRUE)
注意事项
- 若你的文件包含中文,可在
read_lines函数中添加locale = locale(encoding = "GBK")或locale = locale(encoding = "UTF-8")适配文件编码 - 若需要严格匹配文件中标注的字段类型,可提取第三行的类型列表,对数据框逐列做对应转换即可
内容的提问来源于stack exchange,提问作者abdul samad
相关产品推荐
相关产品推荐

