我想分析由數千塊的一個巨大的文件每一個都包含若干子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