2017-05-03 4 views
1

Brauchen Sie Rat, wie man die dritte Liste aus ein paar Listen erstellt. Der erste ist so (etwa 20000 Zeilen): LIST1.Erstellen der Liste von 2 vorherigen Listen

field1 field2  field3  field4    field5 field6 field7 
--------------------------------------------------------------------------- 
    1167 28669 001f.ce5d.cb4d Gi0/0/1.10    1 Vi2.156 PTA 
    848 32350 c83a.350d.f368 Gi0/0/1.10    1 Vi2.601 PTA 
    1771 43465 c46e.1f7a.4763 Gi0/0/1.10    1 Vi2.959 PTA 
    1390 24116 dc9f.db01.c6e8 Gi0/0/1.10    1 Vi2.32  PTA 
    712 23579 d850.e6d5.cb1c Gi0/0/1.10    1 Vi2.436 PTA 
    1239 28354 2828.5dd4.bc65 Gi0/0/1.10    1 Vi2.78  PTA 
    204 27816 e03f.491d.9978 Gi0/0/1.10    1 Vi2.341 PTA 
    383 28368 60e3.278c.7199 Gi0/0/1.10    1 Vi2.114 PTA 
    671 54657 c46e.1f81.a3d3 Gi0/0/1.10    1 Vi2.224 PTA 

Das zweite ist wie folgt (etwa 20000 Zeilen): LIST2

field1   field2   field3   field4  field5 
--------------------------------------------------------------------- 
    Vi2.1  0001799   PPPoE  00:00:08 10.100.146.30 
    Vi2.2  0010129   PPPoE  00:00:08 10.100.148.108 
    Vi2.4  0010173   PPPoE  00:00:08 10.100.150.56 
    Vi2.5  0011093   PPPoE  00:00:08 10.100.146.143 
    Vi2.6  0003301   PPPoE  00:43:48 10.100.150.107 
    Vi2.7  0010101   PPPoE  00:00:08 10.100.147.133 
    Vi2.8  0001859   PPPoE  00:00:08 10.100.145.223 
    Vi2.9  0010049   PPPoE  06:45:08 10.100.147.138 
    Vi2.10  0003515   PPPoE  00:00:28 10.100.146.173 
    Vi2.11  0001747   PPPoE  00:00:18 10.100.146.37 
    Vi2.12  0011060   PPPoE  04:40:28 10.100.149.165 
    Vi2.13  0001335   PPPoE  00:00:08 10.239.152.165 
    Vi2.14  0010154   PPPoE  00:00:08 10.100.148.68 

Ich brauche die dritte Liste zu erstellen, und die Bestellung wird in einem solchen Art und Weise benötigt:

field6(list1) Field2(list1) field3(list1) field2(list2) field5(list2) 

Übrigens. Field6 von list1 ist das selbe wie field1 in list 2. Ich verstehe, dass ich jede Zeile von list1 nehmen muss, mache es eine Liste von Feldern und nimm danach das Feld 6 und gehe zu list2 und suche diesen Wert in der Liste2. Und danach sammeln Sie alle benötigten Felder in einer neuen Zeile. Jeder, ich bin sehr, sehr neu im Parsing, bitte gib mir ein paar Beispiele, wie ich mit dieser (ich denke typischen) Aufgabe umgehen soll!

Klärung. Ich erhalte, dass die Zeilen über Python 3 telnetlib, wie folgt aus:

import telnetlib 

HOST = '2.22.22.22' 
password = "user" 
user = "user" 

tn = telnetlib.Telnet(HOST) 
tn.read_until(b"Username: ") 
tn.write(user.encode('ascii') + b"\n") 
tn.read_until(b"Password: ") 
tn.write(password.encode('ascii') + b"\n") 
tn.write(b"term len 0 \n") 
tn.write(b"show pppoe session | exclude 7878.7878.7878 \n") 

tn.write(b"\n exit\n") 
mystring = tn.read_all().decode('ascii').replace('\r\n', '\n') 
print(mystring) 
temp_list = mystring.splitlines() 
print(temp_list) 
mylist = ["\n".join(s for s in temp_list if 'PTA' in s and 'Vi2' in s)] 
+1

aber dies ist nicht eine Python-Liste -)) – marmeladze

+0

Ich erhalte, dass von der telnetlib von Cisco-Gerät. –

+0

Welches Format haben diese Tabellendaten? – marmeladze

Antwort

0

You might want to hack numpy. loadtxt Methode lädt Tabellendaten aus der Textdatei und wandelt sie in Array (nicht native Python).

Mit dieser handlichen Methode können Sie leicht das Ergebnis erzielen.

>>> import numpy as np 
>>> t1 = "/home/ziya/Projects/python/test/list1.txt" 
>>> t2 = "/home/ziya/Projects/python/test/list1.txt" 
>>> d1 = np.loadtxt(t1, skiprows=2, dtype='str') 
>>> d2 = np.loadtxt(t2, skiprows=2, dtype='str') 
>>> d1_field1 = [i[0] for i in d1] 
>>> d2_field1 = [i[1] for i in d1] 
>>> d3_field1 = [i[2] for i in d1] 
>>> d4_field2 = [i[3] for i in d2] 
>>> d5_field2 = [i[4] for i in d2] 
>>> d6_field2 = [i[5] for i in d2] 
>>> new_list = [] 
>>> new_list.append(d1_field1) 
>>> new_list.append(d2_field1) 
>>> new_list.append(d3_field1) 
>>> new_list.append(d4_field2) 
>>> new_list.append(d5_field2) 
>>> new_list.append(d6_field2) 
>>> new_list 
[['1167', '848', '1771', '1390', '712', '1239', '204', '383', '671'], ['28669', '32350', '43465', '24116', '23579', '28354', '27816', '28368', '54657'], ['001f.ce5d.cb4d', 'c83a.350d.f368', 'c46e.1f7a.4763', 'dc9f.db01.c6e8', 'd850.e6d5.cb1c', '2828.5dd4.bc65', 'e03f.491d.9978', '60e3.278c.7199', 'c46e.1f81.a3d3'], ['Gi0/0/1.10', 'Gi0/0/1.10', 'Gi0/0/1.10', 'Gi0/0/1.10', 'Gi0/0/1.10', 'Gi0/0/1.10', 'Gi0/0/1.10', 'Gi0/0/1.10', 'Gi0/0/1.10'], ['1', '1', '1', '1', '1', '1', '1', '1', '1'], ['Vi2.156', 'Vi2.601', 'Vi2.959', 'Vi2.32', 'Vi2.436', 'Vi2.78', 'Vi2.341', 'Vi2.114', 'Vi2.224']] 
>>> np.array(new_list).transpose() 
array([['1167', '28669', '001f.ce5d.cb4d', 'Gi0/0/1.10', '1', 'Vi2.156'], 
     ['848', '32350', 'c83a.350d.f368', 'Gi0/0/1.10', '1', 'Vi2.601'], 
     ['1771', '43465', 'c46e.1f7a.4763', 'Gi0/0/1.10', '1', 'Vi2.959'], 
     ['1390', '24116', 'dc9f.db01.c6e8', 'Gi0/0/1.10', '1', 'Vi2.32'], 
     ['712', '23579', 'd850.e6d5.cb1c', 'Gi0/0/1.10', '1', 'Vi2.436'], 
     ['1239', '28354', '2828.5dd4.bc65', 'Gi0/0/1.10', '1', 'Vi2.78'], 
     ['204', '27816', 'e03f.491d.9978', 'Gi0/0/1.10', '1', 'Vi2.341'], 
     ['383', '28368', '60e3.278c.7199', 'Gi0/0/1.10', '1', 'Vi2.114'], 
     ['671', '54657', 'c46e.1f81.a3d3', 'Gi0/0/1.10', '1', 'Vi2.224']], 
     dtype='|S14')