如何在Python中将上一行结束时间设为下一行开始时间并累加秒数
嗨,这个需求用Python的标准库就能完美解决,我给你准备了两种场景的实现方案,看你是从初始时间开始生成完整时间链,还是处理已有的表格数据~
方案1:从初始时间生成完整时间链
如果你只有初始开始时间和每一行要添加的秒数列表,可以用这个方法直接生成完整的时间表格:
from datetime import datetime, timedelta def generate_time_table(initial_start_time, time_add_seconds): # 把初始时间字符串转成可计算的datetime对象 current_start = datetime.strptime(initial_start_time, "%H:%M:%S") table_rows = [] for secs in time_add_seconds: # 计算当前行的结束时间 current_end = current_start + timedelta(seconds=secs) # 把时间转成字符串格式,存入结果 table_rows.append({ "start-time": current_start.strftime("%H:%M:%S"), "time_to_add": f"{secs} secs", "endtime": current_end.strftime("%H:%M:%S") }) # 更新下一行的开始时间为当前行的结束时间 current_start = current_end return table_rows # 测试一下你的示例场景 if __name__ == "__main__": initial_time = "10:00:00" add_seconds_list = [30, 15, 10] result_table = generate_time_table(initial_time, add_seconds_list) # 打印成清晰的表格格式 print("start-time|time_to_add|endtime") for row in result_table: print(f"{row['start-time']} |{row['time_to_add']} |{row['endtime']}")
代码说明
- 用到了Python自带的
datetime和timedelta模块,不用额外安装第三方库 strptime负责把字符串格式的时间转成可计算的对象,strftime则把计算后的时间转回字符串timedelta(seconds=secs)专门用来表示“N秒”的时间间隔,直接和datetime对象相加就能得到新的时间- 循环里每次计算完当前行的结束时间,就把它设为下一行的开始时间,完美实现你的链式需求
运行这个代码,输出就是你给出的示例结果:
start-time|time_to_add|endtime 10:00:00 |30 secs |10:00:30 10:00:30 |15 secs |10:00:45 10:00:45 |10 secs |10:00:55
方案2:处理已有表格数据(自动填充)
如果你的表格已经有部分数据(比如第一行有开始时间,后续行只有要添加的秒数),可以用这个方法自动补全所有的开始和结束时间:
from datetime import datetime, timedelta def fill_time_table(existing_table): # 先处理第一行,确保结束时间正确 first_row = existing_table[0] start_time = datetime.strptime(first_row["start-time"], "%H:%M:%S") # 提取秒数(兼容带"secs"和纯数字的格式) add_secs = int(first_row["time_to_add"].replace(" secs", "").strip()) first_row["endtime"] = (start_time + timedelta(seconds=add_secs)).strftime("%H:%M:%S") # 处理后续每一行 for i in range(1, len(existing_table)): # 用上一行的结束时间作为当前行的开始时间 prev_end_time = datetime.strptime(existing_table[i-1]["endtime"], "%H:%M:%S") current_add_secs = int(existing_table[i]["time_to_add"].replace(" secs", "").strip()) current_end_time = prev_end_time + timedelta(seconds=current_add_secs) # 填充当前行的开始和结束时间 existing_table[i]["start-time"] = prev_end_time.strftime("%H:%M:%S") existing_table[i]["endtime"] = current_end_time.strftime("%H:%M:%S") return existing_table # 测试示例 if __name__ == "__main__": # 模拟已有表格数据(只有第一行有开始时间,其他行只有要添加的秒数) input_table = [ {"start-time": "10:30:00", "time_to_add": "30", "endtime": ""}, {"start-time": "", "time_to_add": "30", "endtime": ""}, {"start-time": "", "time_to_add": "20", "endtime": ""} ] filled_table = fill_time_table(input_table) print("starttime | val_to_add | endtime") for row in filled_table: print(f"{row['start-time']} | {row['time_to_add']} | {row['endtime']}")
运行后输出就是你补充的示例效果:
starttime | val_to_add | endtime 10:30:00 | 30 | 10:30:30 10:30:30 | 30 | 10:31:00 10:31:00 | 20 | 10:31:20
额外提示
如果你的表格是从CSV、Excel或者其他文件读取的,只需要把读取到的数据转换成上面示例中的字典列表格式,就能直接套用这个逻辑处理啦~
内容的提问来源于stack exchange,提问作者Pritam Patnaik
相关产品推荐
相关产品推荐

