如何用KDB q查找文件创建日期并验证是否当日生成
KDB/Q 验证CSV文件是否当日创建(或修改)的优化方案
原实现思路
你通过调用system"ls -l"解析文件的时间字符串,对比月日判断是否当日创建,这种方法依赖ls的输出格式,存在跨系统兼容性问题,且字符串解析容易出错。以下是几种更简洁可靠的优化方案:
方案1:使用KDB内置函数获取文件修改时间(推荐)
KDB的.Q.fs函数可以直接获取文件的元数据,其中mtime字段对应文件的修改时间(即ls -l显示的时间),无需依赖外部命令解析:
// 获取文件状态字典 fileStats:.Q.fs`:path/testData.csv // 提取修改时间并转为日期格式 fileDate:`date$fileStats`mtime // 对比当日日期,返回1b(是)或0b(否) isToday:fileDate = .z.d
方案2:获取文件创建时间(区分系统)
如果需要验证创建时间而非修改时间,需注意Unix系统的差异:
- macOS:用
stat -f %SB获取创建时间字符串,再转为KDB日期:createTimeStr:raze system"stat -f %SB /path/testData.csv" fileCreateDate:`date$"MMM dd yyyy"$createTimeStr isToday:fileCreateDate = .z.d - Linux:部分文件系统支持
stat -c %w获取创建时间,格式处理类似:createTimeStr:raze system"stat -c %w /path/testData.csv" // 若输出包含时间,截取日期部分或直接转换 fileCreateDate:`date$createTimeStr isToday:fileCreateDate = .z.d
方案3:直接用shell命令判断
借助find命令直接过滤当日文件,返回值0表示存在当日文件:
// 判断修改时间为当日 isToday:0~system"find /path/testData.csv -mtime 0" // 判断创建时间为当日(Linux需文件系统支持) isToday:0~system"find /path/testData.csv -ctime 0"
内容的提问来源于stack exchange,提问作者Code Enthusiast
相关产品推荐
相关产品推荐

