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

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")

代码说明

  1. 数据库读取优化:
    • 把数据库连接和关闭放在函数内部,避免资源泄漏
    • 拆分数据库返回的字符串(比如'01:02,02:52,03:30,03:31'),得到单个时间点的列表
  2. SRT文件处理:
    • 用with语句安全读取文件,自动关闭
    • 直接检查时间点是否是SRT内容的子串,因为01:02会自然出现在00:01:02,016这类时间格式中
  3. 自动批量检查:
    • 不需要手动输入,直接遍历数据库返回的所有时间点,逐个输出检查结果

测试效果

针对你提供的SRT片段,运行代码后会输出:

时间点 *01:02* 存在于SRT文件中
时间点 *02:52* 未在SRT文件中找到
时间点 *03:30* 未在SRT文件中找到
时间点 *03:31* 未在SRT文件中找到

这样就完全满足你的需求啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:32:28