Python检查数据中时间片段是否存在于SRT文件求助
问题分析与修复:自动检查SRT文件中的时间匹配
首先,咱们先梳理下你的核心需求:从数据库拿到一组MM:SS格式的时间点,自动检查每个时间点是否出现在SRT文件的字幕时间轴里(比如01:02要匹配SRT里的00:01:02,016这类时间)。你的现有代码存在几个关键问题,导致没有输出或者无法完成需求,咱们一步步来修复:
原代码的核心问题
- 数据库数据未被使用:你定义了
read_from_db()但只是打印了data,没有把这些时间点传入后续的检查逻辑,反而搞了个手动输入的循环,完全偏离了需求 - SRT文件处理错误:用
strip().split()拆分整个SRT会把时间轴(比如00:01:02,016)拆成独立的字符串片段,无法正确匹配01:02这种子串 - 逻辑方向错误:你的需求是自动检查数据库里的所有时间点,而不是等待用户手动输入字符串
修复后的完整代码
import mysql.connector def read_from_db(): conn = mysql.connector.connect(user="root", password="", host="localhost", database="videojs") cursor = conn.cursor() cursor.execute("select time_arr from info where id ='52'") data = cursor.fetchall() cursor.close() conn.close() # 拆分数据库返回的时间字符串,得到单个时间点列表 if data: time_str = data[0][0] return time_str.split(',') return [] def check_time_in_srt(time_points, srt_path): # 读取SRT文件的全部内容 with open(srt_path, 'r', encoding='utf-8') as fobj: srt_content = fobj.read() # 遍历每个时间点检查匹配 for time_point in time_points: # 直接检查time_point是否是SRT时间的子串(比如01:02在00:01:02,016里) if time_point in srt_content: print(f"时间点 *{time_point}* 存在于SRT文件中") else: print(f"时间点 *{time_point}* 未在SRT文件中找到") # 主逻辑 if __name__ == "__main__": # 从数据库获取时间点列表 time_list = read_from_db() if not time_list: print("未从数据库获取到时间数据") else: # 检查每个时间点是否在SRT中 check_time_in_srt(time_list, "one.srt")
代码说明
- 数据库读取优化:
- 把数据库连接和关闭放在函数内部,避免资源泄漏
- 拆分数据库返回的字符串(比如
'01:02,02:52,03:30,03:31'),得到单个时间点的列表
- SRT文件处理:
- 用
with语句安全读取文件,自动关闭 - 直接检查时间点是否是SRT内容的子串,因为
01:02会自然出现在00:01:02,016这类时间格式中
- 用
- 自动批量检查:
- 不需要手动输入,直接遍历数据库返回的所有时间点,逐个输出检查结果
测试效果
针对你提供的SRT片段,运行代码后会输出:
时间点 *01:02* 存在于SRT文件中 时间点 *02:52* 未在SRT文件中找到 时间点 *03:30* 未在SRT文件中找到 时间点 *03:31* 未在SRT文件中找到
这样就完全满足你的需求啦。
内容的提问来源于stack exchange,提问作者MrE
相关产品推荐
相关产品推荐

