我想分析由数千块的一个巨大的文件每一个都包含若干子blocks.for使其易于考虑含波纹线的输入文件:而其他内循环而循环,无限循环
a
2
3
4
b
3
9
2
c
7
每个在不同的行。其中字母定义每个块和数字是该块的属性, 我希望输出作为字典块名称作为关键和属性列表只有2和3(如果存在)像这样:
{a:[2,3],b:[3,2],c:[]}
我认为是ST的方法是使用两个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))
输出:
首先,“C \ n'.isalpha(),因为的返回False‘\ n’,所以你从来没有把你的名单到你的字典中。您应该执行lev_1 = line.strip()或lev_1 = line [: - 1]以从行尾删除换行符。之后你可以调用str.isalpha()。其次,当第二行或第三行使循环跳过某些行时,在第二个循环中调用file.readline()两次。 – SzieberthAdam
@SzieberthAdam @SzieberthAdam我不明白错误的第二部分,在第二个循环中,我调用了file.readline()两次,但每个都在单独的'if'语句中,因此每个循环中的第二个'while'循环只是其中的一个执行,为什么不发生?为什么python执行它们两个? – user3015703
所有连续的if都被执行。你想用elif替换第二个。 – SzieberthAdam