繁体   English   中英

while循环在其他while循环内,无限循环

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM