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

读取m3u8文件内容存入字典时while循环不运行无报错如何解决

问题原因

  • 你只在进入while循环前对y1做了一次赋值,循环过程中x2递增后y1没有同步更新,永远等于y[0]也就是#EXTENC,只要当前行不是这个标签就会一直累加x2直到退出循环,根本不会执行匹配逻辑。
  • 循环判断条件写的是x2<=len(y),列表索引最大为len(y)-1,当x2等于len(y)时会触发索引越界错误,应该改为x2 < len(y)。
  • 拆分标签行后取值错误,你用了行号变量x作为split结果的索引,split后的列表最多只有2个元素(标签名、标签值),只能用固定索引0和1取值,当x大于1时会直接触发索引错误。
  • 你定义的标签列表y里,EXT-X-DISCONTINUITY-SEQUENCE前面少写了#,就算走到对应分支也匹配不到该标签。
  • 你的逻辑默认标签在m3u8文件里的出现顺序和你定义的y列表顺序完全一致,但实际m3u8的标签没有强制顺序,一旦顺序不匹配就会漏匹配。

修正后代码

with open("Downloads/chunk.m3u8", "r", encoding="utf-8") as f:
    lines = f.readlines()
infodict = {}
# 预定义所有要匹配的标签
tags = ["#EXTENC","#PLAYLIST","#EXTGRP","#EXTLAP","#EXTART","#EXTGENRE","#EXTM3A","#EXTBYT","#EXTBIN","#EXTIMG","#EXT-X-VERSION","#EXT-X-START","#EXT-X-PLAYLIST-TYPE","#EXT-X-TARGETDURATION","#EXT-X-MEDIA-SEQUENCE","#EXT-X-INDEPENDENT-SEGMENTS","#EXT-X-MEDIA","#EXT-X-STREAM-INF","#EXT-X-BYTERANGE","#EXT-X-DISCONTINUITY","#EXT-X-DISCONTINUITY-SEQUENCE","#EXT-X-KEY","#EXT-X-MAP","#EXT-X-PROGRAM-DATE-TIME","#EXT-X-DATERANGE","#EXT-X-I-FRAMES-ONLY","#EXT-X-I-FRAME-STREAM-INF","#EXT-X-SESSION-DATA","#EXT-X-SESSION-KEY"]
line_idx = 0
# 先匹配开头的EXTM3U
if "#EXTM3U" in lines[line_idx]:
    infodict["#EXTM3U"] = ""
    line_idx += 1
# 遍历所有行匹配标签
while line_idx < len(lines):
    current_line = lines[line_idx].rstrip("\n")
    # 遇到结束标签直接退出
    if "#EXT-X-ENDLIST" in current_line:
        break
    # 匹配所有预定义标签
    for tag in tags:
        if tag in current_line:
            tag_info = current_line.split(":", 1)
            if len(tag_info) == 2:
                infodict[tag_info[0] + ":"] = tag_info[1]
            else:
                infodict[tag_info[0]] = ""
            break
    line_idx += 1
print(infodict)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:45:07