【问题标题】:How to add texts in a file as an input to a dictionary如何将文件中的文本添加为​​字典的输入
【发布时间】:2021-11-09 20:20:14
【问题描述】:

我创建了一个脚本来读取 m3u8 文件中的信息并将它们存储在字典中。

代码的第一部分正在运行,但 while 循环似乎根本没有运行。而且它甚至没有给出错误。可能它不可能是语法错误。我无法想象可能是什么原因..

file=open("Downloads/chunk.m3u8", "r")
f = file.readlines()
infodict={}
x=0
x2=0
y=["#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"]
y1=y[x2]
if "#EXTM3U" in f[x]:
        s="#EXTM3U"
        infodict[s]= ""
        x=x+1
while x2<=len(y):
      if y1 in f[x]:
        s=f[x].rstrip("\n").split(":",1)
        infodict[s[x]+":"]= s[x+1]
        x=x+1
        x2=x2+1
      elif "#EXT-X-ENDLIST" in f[x]:
           break
      else:
        x2=x2+1    
        continue
       
print(infodict)

只有输出是这个,

{'#EXTM3U': ''}

【问题讨论】:

  • 尝试过使用调试器来验证您是否假设 while 循环没有被执行?

标签: python loops dictionary while-loop m3u8


【解决方案1】:

在您的循环中,如果 y1 不在 f[x] 中,则 x2 将递增,直到 x2 等于 y 的长度。这里的关键问题是 x(因此 f[x])和 y1 在这种情况下永远不会改变,因此将始终以相同的方式进行评估。这会产生 while 循环的行为而无需执行任何操作,它所做的只是一遍又一遍地达到“else”条件,直到循环终止。

我认为可以帮助您推理此代码的另一条建议是避免使用不透明的变量名称,例如 x1、x2、y1、y2 等。你的变量名应该是names——也就是说,它们应该向读者传达一些含义,这将有助于读者(即使那个读者只是你)理解代码在做什么。最好多输入几个字符并有一个清晰的描述,而不是省去几个键击而不理解代码在做什么。

【讨论】:

    猜你喜欢
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    相关资源
    最近更新 更多