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

Python遍历两个CSV文件并对比时间戳范围的实现问题

问题解决:CSV时间范围匹配逻辑修复

我帮你梳理下代码里的问题,然后给出修复后的版本,保证能得到你想要的输出~

你的需求回顾

你有两个CSV文件,需要遍历File1的每个时间范围,找出File2中落在该范围内的时间戳,具体内容和预期输出如下:

CSV File1内容

Range1,2018-05-17 01:50:17+0000,2018-05-17 02:00:17+0000
Range2,2018-05-17 01:50:17+0000,2018-05-17 04:00:17+0000
Range3,2018-05-17 01:50:17+0000,2018-05-17 08:00:17+0000

CSV File2内容

TimeStamp1,2018-05-17 01:59:17+0000
TimeStamp2,2018-05-17 03:59:17+0000
TimeStamp3,2018-05-17 07:59:17+0000

预期输出

TimeStamp1 falls within Range1
TimeStamp1, TimeStamp2 falls within Range2
TimeStamp1, TimeStamp2, TimeStamp3 falls within Range3

原代码的问题分析

你的代码主要有几个明显的问题:

  1. 索引错误:CSV读取的行是从0开始索引的,你用range_row[2]、range_row[3]去取时间范围,但File1每行只有3个元素(名称、开始时间、结束时间),应该用range_row[1]和range_row[2];同理File2每行只有2个元素,时间戳值是timeStamp_row[1],不是timeStamp_row[2]。
  2. 迭代器耗尽问题:timeStamp_reader是一次性迭代器,第一次遍历完后就没有内容了,后续处理File1的下一行时,内层循环不会再执行。
  3. 语法错误:if语句末尾缺少冒号:,这会直接导致代码运行报错。
  4. 文件打开模式:用'rb'二进制模式打开文件,在Python中处理CSV应该用文本模式'r',还可以加上newline=''符合CSV模块的最佳实践。

修复后的代码

import csv

# 先把File2的所有时间戳数据加载到列表中,避免迭代器耗尽
with open('File2', 'r', newline='') as timeStamp_file:
    timeStamp_reader = csv.reader(timeStamp_file)
    timestamp_list = list(timeStamp_reader)

# 遍历File1的每个时间范围
with open('File1', 'r', newline='') as range_file:
    range_reader = csv.reader(range_file)
    for range_row in range_reader:
        range_name = range_row[0]
        start_time = range_row[1]
        end_time = range_row[2]
        # 收集当前范围内的所有时间戳名称
        matched_timestamps = []
        for ts_row in timestamp_list:
            ts_name = ts_row[0]
            ts_time = ts_row[1]
            # 直接比较时间字符串(这里格式统一可以直接比,复杂场景建议转datetime对象)
            if start_time <= ts_time <= end_time:
                matched_timestamps.append(ts_name)
        # 按照预期格式输出结果
        if matched_timestamps:
            print(f"{', '.join(matched_timestamps)} falls within {range_name}")

关键修复点说明

  • 预加载File2数据:把File2的内容转成列表保存,这样每次处理File1的一行时,都能重新遍历所有时间戳,解决了迭代器只能用一次的问题。
  • 修正索引值:正确使用0-based索引获取每行的元素,避免索引越界错误。
  • 语法修正:补上if语句的冒号,调整文件打开模式为文本模式,确保代码能正常运行。
  • 统一输出格式:先收集所有匹配的时间戳,再用逗号分隔后打印,完全符合你想要的输出样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:16:48