同じ形式に従う 100 以上のファイルを解析しています。たとえば、1 つのファイルについて、リスト内の 2 つのキーと複数の値で構成される辞書があります。
temp2 = {
'0.1995': ['X3:GATE', 'IN1', 'IN1', 'X7:GATE', 'X4:GATE', 'IN2', 'IN2', 'X8:GATE'],
'0.399': ['X4:GATE', 'Y', 'Y', 'X3:GATE', 'Y', 'X8:SRC', 'X1:GATE', 'IN0', 'IN0', 'X5:GATE']
temp2 ディクショナリを作成するコードは次のとおりです。
#temp_delvt_list, temp_pin_list is from an external function
for delvt, pin in zip(temp_delvt_list, temp_pin_list):
temp[delvt].append(pin) #dictionary with delvt and pin names for cell
for line in SPFFile1:
# print line
for delvt_keys,pin_values in temp.items():
# if re.match('[RC].*(?:i%s)' % '|'.join(pin_values), line): //couldn't get working
if re.search('(?i)' '|'.join(pin_values),line) and re.match('R',line):
#print delvt_keys
line_split = line.split(" ")
temp_list.append(delvt_keys)
temp_list.append(delvt_keys) #duplicated to create balanced list with temp_search_list
temp_search_list.append(line_split[1])
temp_search_list.append(line_split[2])
# print temp_list
# print temp_search_list
SPFFile1.close()
for d, p in zip(temp_list, temp_search_list):
#print temp2[d]
# print re.sub(':SRC',':ISI',p)
temp2[d].append(p) #dictionary with delvt and pin names for cell
# print temp2
}
各キーの値を検索してから、Y 値のないキー (0.1995) を検索しようとしています。Y 値を持つキー (0.399) にも表示されるそのキーに表示されるすべての値を削除します。キー値は次のとおりです。ハードコーディングされておらず、変更される可能性があります。
出力は次のようになります。
temp2 = {
'0.1995': ['X3:GATE', 'IN1', 'IN1', 'X7:GATE', 'X4:GATE', 'IN2', 'IN2', 'X8:GATE'],
'0.399': ['Y', 'Y','Y', 'X8:SRC', 'X1:GATE', 'IN0', 'IN0', 'X5:GATE']
}
これが私がこれまでに理解したコードです:
for test_d, test_p in temp2.items():
if not re.search('Y', ' '.join(test_p)) :
for x in test_p:
print x
else:
for y in test_p:
print y
print ステートメントを、比較対象のいずれかのリストに置き換える必要があると思います。