如何合并csvreader生成器对象的日期时间列完成时间对比校验
解决方案
原代码的问题点:用空格作为分隔符读取CSV时,2021-08-09和15:50:44会被拆分为两个独立列,仅取索引为1的列只会得到无日期的时间片段,自然无法正确对比。
最高效的实现方案如下:
from datetime import datetime as dt import csv # 格式化控制时间为和CSV一致的YYYY-MM-DD HH:MM:SS格式,避免微秒干扰对比结果 control_time = dt.now().strftime("%Y-%m-%d %H:%M:%S") reader = csv.reader(results, delimiter=" ") # 直接遍历reader拼接日期+时间,用生成器不需要加载全量数据到内存,大文件效率更高 check_timestamps_updated = all(f"{row[0]} {row[1]}" >= control_time for row in reader)
方案优化说明
- 去掉了冗余的全量数据转列表、zip操作,遍历reader即可同步完成拼接+校验,内存占用从O(n)降到O(1),文件越大效率优势越明显
- 修正了控制时间的格式:原代码直接转
dt.now()为字符串会携带微秒字段,和CSV里的时间格式不匹配,会导致对比逻辑错误 - 保留了字符串直接对比的逻辑:由于使用的是ISO标准的日期时间格式,字符串的字典序和时间先后顺序完全一致,不需要额外转datetime对象,减少了计算开销
如果需要更严谨的类型校验(比如存在非标准格式的时间戳),可以转成datetime对象对比,写法如下:
from datetime import datetime as dt import csv control_time = dt.now() reader = csv.reader(results, delimiter=" ") check_timestamps_updated = all(dt.strptime(f"{row[0]} {row[1]}", "%Y-%m-%d %H:%M:%S") >= control_time for row in reader)
内容的提问来源于stack exchange,提问作者PianoTiger
相关产品推荐
相关产品推荐

