[英]while loop inside other while loop, infinite loop
我想解析一个包含数千个块的巨大文件,每个文件包含几个子块。为了简化起见,请考虑包含波纹管的输入文件:
a
2
3
4
b
3
9
2
c
7
每个字母都在单独的行上。其中字母定义每个块,数字是块的属性,我希望将输出作为字典,以块名作为键,属性列表只有2和3(如果存在),如下所示:
{a:[2,3],b:[3,2],c:[]}
我认为最好的方法是使用两个while循环来读取和搜索这样的行:
dict={}
with open('sample_basic.txt','r') as file:
line=file.readline()
line=line.strip()
while line:
if line.isalpha():
block_name=line
line=file.readline()
line=line.strip()
list=[]
while line:
lev_1=line
if lev_1 in ['2','3']:
list.append(lev_1)
line=file.readline()
line=line.strip()
if lev_1.isalpha():
dict[block_name]=list
break
else:
line=file.readline()
line=line.strip()
但是它只是通过执行进入无限循环。
我一直在寻找错误,但我找不到它在哪里。 我很高兴有人能给我一些提示。
我没有仔细检查您的代码,因此无法为您提供无限循环,但是我编写了没有嵌套循环的新代码:
import collections
d = collections.defaultdict(list)
with open('sample_basic.txt') as f:
for line in f:
line = line.strip()
if line.isalpha():
blockname=line
else:
if line in ('2', '3'):
d[blockname].append(int(line))
使用带有您编写的内容的文件的输出为{'b': [3, 2], 'a': [2, 3]}
。
如果您想要字典中包含键c
的空列表,请执行
d={}
with open('sample_basic.txt') as f:
for line in f:
line = line.strip()
if line.isalpha():
blockname=line
d[blockname] = []
else:
if line in ('2', '3'):
d[blockname].append(int(line))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.