有两个输入:
输入1:
CHPID PATH=(CSS(0,1,2),11),SHARED, NOTPART=((CSS(0),(BP0101),(BP0102),(=)),(CSS(1),(BP0112),(=)),(CSS(2),(BP0121),(=))),SWITCH=11,SWPORT=((11,31))'
我想出去1:
{'CSS(0)': ['(BP0101)', '(BP0102)'], 'CSS(1)': ['(BP0112)'], 'CSS(2)': ['(BP0121)']}
Henry 帮我重新编码
输入2:
LNUM LNAME TYPE DESC CSS(0) BP01 PRODUCTION-BP01 010F383906
1 BP0101 OS PLEXNP1-NP1A
2 BP0102 OS PLEXNP1-NP1B
3 BP0103 OS PLEXNP1-NP1G
4 BP0104 OS DRI VER
LNUM LNAME TYPE DESC CSS(1) BP01 TEST-BP01 010F383906
1 BP0111 OS PLEXNP1-TEST-NP1E
2 BP0112 OS PLEXNP1-TEST-NPK1
3 BP0113 OS PLEXNP1-TEST-NP1J
LNUM LNAME TYPE DESC CSS(2) BP01 TEST-BP01 010F383906
1 BP0121 OS PLEXNP2-TEST-NP2E
2 BP0122 OS PLEXNP2-TEST-NPK2
3 BP0123 OS PLEXNP2-TEST-NP2J
我要出局2:
{'CSS(0)': ['(BP0101)', '(BP0102)', '(BP0103)', '(BP0104)'], 'CSS(1)': ['(BP0111)', '(BP0112)', '(BP0113)'], 'CSS(2)': ['(BP0121)', '(BP0122)', '(BP0123)']}
最后我想比较 OUT1 和 OUT2 来更新 input1 得到如下结果:
CHPID PATH=(CSS(0,1,2),11),SHARED, PARTITION=((CSS(0),(BP0103),(BP0104),(=)),(CSS(1),(BP0111),(BP0113),(=)),(CSS(2),(BP0122),(BP0123),(=))),SWITCH=11,SWPORT=((11,31))
下面是代码:
import re
# Henry Tjhia's code
content = 'CHPID PATH=(CSS(0,1,2),11),SHARED, NOTPART=((CSS(0),(BP0101),(BP0102),(=)),(CSS(1),(BP0112),(=)),(CSS(2),(BP0121),(=))),SWITCH=11,SWPORT=((11,31))'
r = re.compile(r'(CSS\(\d\).+?(?=.\(=\)))')
s = r.findall(content)
z = {j[0]: j[1:] for i in s for j in [i.split(',')]}
print('out1:',z)
# Henry Tjhia's code above
regex = re.compile('\s+')
content1 = '''LNUM LNAME TYPE DESC CSS(0) BP01 PRODUCTION-BP01 010F383906
1 BP0101 OS PLEXNP1-NP1A
2 BP0102 OS PLEXNP1-NP1B
3 BP0103 OS PLEXNP1-NP1G
4 BP0104 OS DRI VER
LNUM LNAME TYPE DESC CSS(1) BP01 TEST-BP01 010F383906
1 BP0111 OS PLEXNP1-TEST-NP1E
2 BP0112 OS PLEXNP1-TEST-NPK1
3 BP0113 OS PLEXNP1-TEST-NP1J
LNUM LNAME TYPE DESC CSS(2) BP01 TEST-BP01 010F383906
1 BP0121 OS PLEXNP2-TEST-NP2E
2 BP0122 OS PLEXNP2-TEST-NPK2
3 BP0123 OS PLEXNP2-TEST-NP2J'''
a=[]
b = {}
cc = {}
cs=[]
line = 0
item = content1.split('\n')
while line < len(item):
if len(item[line]) > 0:
a = regex.split(item[line])
if 'TYPE' in a:
ccs = a[4].strip()
line = line + 1
a = regex.split(item[line])
while 'TYPE' not in a:
cs.append("("+a[1]+")")
line =line+1
if line < len(item):
a = regex.split(item[line])
else:
break
b={ccs : cs}
cc.update(b)
cs =[]
print('out2:',cc)
for key1, value1 in cc.items():
for key2, value2 in z.items():
if key1 == key2:
list1 = cc[key1]
list2 = z[key1]
unique = [mm1 for mm1 in list1 if mm1 not in list2]
print ('diff:',key1,unique)
uuu =','.join(unique)
part00 = key1 +','+','.join(z[key1])
repl00 = key1 + ',' + uuu
content = content.replace(part00,repl00)
part00=''
repl00=''
uuu=''
content = content.replace('NOTPART','PARTITION')
print('new:',content)
你能帮我简化这段代码吗?非常感谢!
杰森蔡