如何在R中通过固定前缀读取带时间戳的CSV并自动选择最新版本
实现思路
根本不需要写复杂的文件名切割解析逻辑,两步就能搞定需求:
- 先用通配规则匹配所有带固定文件名前缀的CSV,直接跳过目录下的其他无关文件
- 从匹配到的候选文件里,选出时间戳最新的那一个作为读取目标
这里有个非常省事的点:你用的时间戳是YYYY-MM-DD HH:MM:SS的定长ISO格式,这种格式的字符串字典序和实际时间先后完全等价,根本不需要额外转成时间类型做对比,直接按文件名排序就能准确判断新旧。
常用场景代码实现
Python 脚本读取场景
这是最常见的读CSV的场景,直接用内置库就能实现,不需要装额外依赖:
import glob import os # 按你的实际情况修改这两个配置 FILE_PREFIX = "CSVFileName" # 固定的文件名前缀 CSV_DIR = "./csv_file_folder" # CSV存放的目录路径 # 匹配所有符合前缀规则的文件 matched_files = glob.glob(os.path.join(CSV_DIR, f"{FILE_PREFIX}_*.csv")) if not matched_files: raise RuntimeError("没有找到符合规则的目标CSV文件") # 取排序后最新的文件:因为文件名时间戳是ISO定长格式,max取到的就是时间最晚的 latest_file = max(matched_files) # 后续正常读取latest_file即可,示例输出 print(f"选中的最新文件路径:{latest_file}")
如果你的时间戳不是标准定长格式(比如出现2021-1-3 9:2:1这种缺前导零的写法),不要硬靠文件名排序,换成取文件系统记录的实际修改时间来选最新,逻辑更稳妥:
# 按文件实际修改时间选最新 latest_file = max(matched_files, key=os.path.getmtime)
Shell 批处理场景
如果是在Linux/Shell环境下做文件批处理,一行规则就能搞定:
# 匹配同前缀文件,按字典序排序后取最后一个(即最新的) LATEST_CSV=$(ls -1 ./csv_file_folder/CSVFileName_*.csv 2>/dev/null | sort | tail -n 1) if [ -z "$LATEST_CSV" ]; then echo "未找到匹配的CSV文件" exit 1 fi echo "选中的最新文件:$LATEST_CSV"
注意事项
- 通配规则要把固定前缀写全,不要偷懒直接匹配
*.csv,避免把同目录下其他业务生成的CSV误当成目标文件 - 不要硬做固定路径拼接,一旦同目录下存在同前缀的临时文件、损坏导出文件,很容易读错内容
- 如果后续程序对文件完整性有要求,可以加个简单判断:匹配到的最新文件要能正常打开、不是0字节的空文件,避免读到导出过程中中断的半文件
内容的提问来源于stack exchange,提问作者M. Yates
相关产品推荐
相关产品推荐

