<p>有两种输入:
输入1:</p>
<pre><code>CHPID PATH=(CSS(0,1,2),11),SHARED, NOTPART=((CSS(0),(BP0101),(BP0102),(=)),(CSS(1),(BP0112),(=)),(CSS(2),(BP0121),(=))),SWITCH=11,SWPORT=((11,31))'
</code></pre>
<p>我想出去1:</p>
<pre><code>{'CSS(0)': ['(BP0101)', '(BP0102)'], 'CSS(1)': ['(BP0112)'], 'CSS(2)': ['(BP0121)']}
</code></pre>
<p>亨利帮我重新编码</p>
<p>输入2:</p>
<pre><code> 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
</code></pre>
<p>我想离开2:</p>
<pre><code> {'CSS(0)': ['(BP0101)', '(BP0102)', '(BP0103)', '(BP0104)'], 'CSS(1)': ['(BP0111)', '(BP0112)', '(BP0113)'], 'CSS(2)': ['(BP0121)', '(BP0122)', '(BP0123)']}
</code></pre>
<p>最后,我想比较OUT1和OUT2以更新input1,从而得到以下结果:</p>
<pre><code>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))
</code></pre>
<p>代码如下:</p>
<pre><code> 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)
</code></pre>
<p>你能帮我简化这个代码吗?非常感谢</p>
<p>蔡志强</p>