Python新手求助:如何计算带Timecode Tags的文本中广告总时长?
计算广告总时长的Python实现步骤
步骤1:提取广告的开始/结束时间
用正则表达式匹配文本中广告块的时间对,精准捕获<time="HH:MM:SS"><type=ad>...</time="HH:MM:SS"></type=ad>结构里的开始、结束时间。
步骤2:时间转换为总秒数
把HH:MM:SS格式的字符串转成总秒数,方便计算时长差值。比如08:02:24可转换为8*3600 + 2*60 +24 = 28944秒。
步骤3:计算单条广告时长并求和
用结束时间的秒数减去开始时间的秒数得到单条广告时长,累加所有广告时长后,再转回HH:MM:SS格式输出。
完整代码示例
import re # 待处理的中文文本 text = '<time="08:00:00"><type=ad> 一些文本1 <time="08:02:24"></type=ad> 一些文本2 <time="08:10:18"><type=ad> 一些文本3 <time="08:12:20"></type=ad>' # 正则匹配所有广告块的时间对 pattern = r'<time="(\d{2}:\d{2}:\d{2})"><type=ad>.*?<time="(\d{2}:\d{2}:\d{2})"></type=ad>' time_pairs = re.findall(pattern, text, re.DOTALL) def time_to_sec(time_str): """将HH:MM:SS转换为总秒数""" h, m, s = map(int, time_str.split(':')) return h * 3600 + m * 60 + s total_duration = 0 # 遍历计算每条广告时长并累加 for start, end in time_pairs: start_sec = time_to_sec(start) end_sec = time_to_sec(end) duration = end_sec - start_sec total_duration += duration print(f"单条广告时长:{start} -> {end},时长 {duration//3600}:{(duration%3600)//60}:{duration%60}") # 总时长转HH:MM:SS格式输出 h = total_duration // 3600 m = (total_duration % 3600) // 60 s = total_duration % 60 print(f"\n广告总时长:{h:02d}:{m:02d}:{s:02d}")
代码说明
re.findall搭配re.DOTALL可以匹配带换行的广告文本,确保所有广告块都被捕获。time_to_sec函数简化了时间格式转换,避免重复计算。- 输出单条广告时长方便核对,总时长格式化后更易读。
内容的提问来源于stack exchange,提问作者pervosled
相关产品推荐
相关产品推荐

