如何将文件中的文本添加为字典的输入
How to add texts in a file as an input to a dictionary
我创建了一个脚本来读取 m3u8 文件中的信息并将它们存储在字典中。
代码的第一部分可以运行,但 while 循环似乎根本就不是 运行。而且它甚至没有给出 error.Probably 这不可能是语法错误。我无法想象可能是什么原因..
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': ''}
在您的循环中,如果 y1 不在 f[x] 中,则 x2 将递增直到 x2 等于 y 的长度。这里的关键问题是 x(因此 f[x])和 y1 在这种情况下永远不会改变,因此将始终以相同的方式求值。这会产生 while 循环执行时什么都不做的行为,它所做的只是一遍又一遍地触发“else”条件,直到循环终止。
我认为可以帮助您推理此代码的另一位建议是避免使用不透明的变量名称,例如 x1、x2、y1、y2 等。您的变量名称应该是 names - 也就是说,它们应该向 reader 传达一些含义,这将有助于 reader (即使 reader只有你)明白代码在做什么。多输入几个字符并有一个清晰的描述,总比省去几次击键而不明白代码在做什么要好。
我创建了一个脚本来读取 m3u8 文件中的信息并将它们存储在字典中。
代码的第一部分可以运行,但 while 循环似乎根本就不是 运行。而且它甚至没有给出 error.Probably 这不可能是语法错误。我无法想象可能是什么原因..
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': ''}
在您的循环中,如果 y1 不在 f[x] 中,则 x2 将递增直到 x2 等于 y 的长度。这里的关键问题是 x(因此 f[x])和 y1 在这种情况下永远不会改变,因此将始终以相同的方式求值。这会产生 while 循环执行时什么都不做的行为,它所做的只是一遍又一遍地触发“else”条件,直到循环终止。
我认为可以帮助您推理此代码的另一位建议是避免使用不透明的变量名称,例如 x1、x2、y1、y2 等。您的变量名称应该是 names - 也就是说,它们应该向 reader 传达一些含义,这将有助于 reader (即使 reader只有你)明白代码在做什么。多输入几个字符并有一个清晰的描述,总比省去几次击键而不明白代码在做什么要好。