R语言如何读取文件夹中stock前缀的最新txt文件或合并所有匹配文件
R语言股票数据文件读取方案
问题根因说明
你之前的代码匹配结果不符合预期,是因为R的list.files函数的pattern参数接收的是正则表达式,而非系统通配符,"*.txt"的写法无法限定文件名以stock开头。
1 筛选stock开头的txt文件
正确的筛选写法如下:
fileList <- list.files(pattern = "^stock.*\\.txt$")
正则规则解释:
^匹配字符串开头,限定文件名必须以stock起始.*匹配任意长度的任意字符,适配文件名中的日期段\\.txt转义匹配后缀.txt,避免匹配到后缀不符合的文件$匹配字符串结尾,保证文件后缀完全符合要求
2 完整需求实现代码
以下代码可实现「优先读取最新stock文件,读取失败则自动合并所有stock开头txt文件」的逻辑,可根据实际txt的分隔格式调整读取函数的参数:
# 筛选所有符合要求的stock类txt文件 file_list <- list.files(pattern = "^stock.*\\.txt$") # 校验是否存在符合要求的文件 if (length(file_list) == 0) { stop("未检测到任何stock开头的txt数据文件") } # 按文件修改时间降序排序,取第一个为最新生成的文件 file_meta <- file.info(file_list) sorted_files <- rownames(file_meta)[order(-file_meta$mtime)] latest_file <- sorted_files[1] # 优先读最新文件,报错则合并所有文件 stock_data <- tryCatch({ # 若txt是制表符分隔用read.delim,逗号分隔用read.csv,可自行调整参数如header、sep等 read.delim(latest_file, stringsAsFactors = FALSE) }, error = function(e) { # 最新文件读取失败时遍历合并所有文件 all_data <- data.frame() for (f in file_list) { tmp_data <- read.delim(f, stringsAsFactors = FALSE) all_data <- rbind(all_data, tmp_data) } return(all_data) })
内容的提问来源于stack exchange,提问作者Edjotace
相关产品推荐
相关产品推荐

