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

基于关键词匹配为批量TXT气象文件添加站点名列的实现方法咨询

实现方案

核心逻辑

你已经有完整的站点名列表,无需通过复杂正则从头文件结构中截取内容,直接采用「先读头行匹配站点→再读正式数据追加列」的两步处理逻辑,既保留data.table::fread的高性能,又能100%匹配到正确的站点名,不受站点名带空格、名称长度不统一的影响。

前置准备

将你已有的站点名整理为字符向量,示例:

# 替换为你实际的站点名列表
station_list <- c("ARMAGH", "Cex et England", "LONDON HEATHROW", ...)

完整实现代码

# 加载依赖包
library(data.table)
library(stringr)
library(purrr)

# 1. 匹配所有目标TXT文件路径
txt_paths <- list.files(pattern = "\\.txt$", full.names = TRUE)

# 2. 定义单个文件的处理函数
process_station_file <- function(file_path) {
  # 读取文件前3行的头部说明(头部位置靠后的话可以调大n参数)
  head_content <- readLines(file_path, n = 3, warn = FALSE)
  
  # 从头部内容中精准匹配已有的站点名
  matched_station <- str_extract(
    head_content,
    # 将站点列表转为正则备选项,支持大小写不敏感匹配
    regex(str_c(station_list, collapse = "|"), ignore_case = TRUE)
  ) |> na.omit() |> as.character()
  
  # 读取正式数据,沿用fread自动跳过头的特性
  dt <- fread(file_path)
  
  # 新增站点名列
  dt[, Station := matched_station]
  
  return(dt)
}

# 3. 批量处理所有文件,合并为总数据表
full_data <- map_dfr(txt_paths, process_station_file)

# 可选:导出带站点列的单文件到原目录
# iwalk(
#   full_data,
#   ~fwrite(.x, file.path(dirname(txt_paths[.y]), str_c("with_station_", basename(txt_paths[.y]))))
# )

适配调整说明

  • 若头部说明行数较多,将readLines的n参数调整为5或更大值即可
  • 若站点名匹配需要严格区分大小写,删除regex()中的ignore_case = TRUE参数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 07:45:08