2016-08-12 4 views
0

ich die Ausgabe im Format haben:Lesung entsprechende Spalten mit Python

Neighbor   InQ OutQ Up/Down State 
10.230.3.2   0 0 33w5d  1177 
10.230.4.2   0 0 33w4d  1175 
125.62.173.253  0 0 8w3d   2637 
125.62.173.254  0 0 1w3d   2657 

Ich möchte den Nachbar lesen (zB 10.230.3.2), wenn Zustand> = 0. Ebenso möchte ich alle lesen die Nachbarn, deren entsprechende Zustandsspalte> = 0 ist.

Bitte schlagen Sie mir vor, wie kann ich das tun? Jede Hilfe wird geschätzt. Danke im Voraus!

Antwort

0

Nicht 100% sicher, wonach Sie fragen und in welchem ​​Format Sie diese Daten haben, aber dies wird die Spalte Neighbour ausgeben, wenn State> = 0. Sie können dies auf Grundlage Ihrer Anforderungen in eine Liste oder ein Tupel oder ein Wörterbuch verschieben.

EDIT: nur die Datei Unter der Annahme hat ein Platz pro Eintrag und Sie haben es mit Leerzeichen formatiert diese

with open("filename.txt", "r") as f: 
    for row in f: 
     data = row.split(" ") 
     if data[4]>=0: 
      print data[0] 
+0

Hallo Daniel, ich die Daten in einer Textdatei und ich Ihren Code versucht, es ist nicht wahrscheinlich zu arbeiten, weil Textdatei Zeile und Spalte nicht versteht. Kann ich das auch anders machen? – Anjali

0

arbeiten Sie Pandas verwenden können.

>>> import pandas as pd 
>>> data_set = [('10.230.3.2', 0, 0, '33w5d', 1177), ('10.230.4.2', 0, 0, '33w5d', 1175), ('125.62.173.253', 0, 0, '8w3d', 2637), ('125.62.173.254', 0, 0, '1w3d', 2657), ('127.0.0.1', 0, 0, '1w0d', -1)] 
>>> df = pd.DataFrame(data = data_set, columns=['Neighbour', 'InQ', 'OutQ', 'Up/Down', 'State']) 
>>> df 
     Neighbour InQ OutQ Up/Down State 
0  10.230.3.2 0  0 33w5d 1177 
1  10.230.4.2 0  0 33w5d 1175 
2 125.62.173.253 0  0 8w3d 2637 
3 125.62.173.254 0  0 1w3d 2657 
4  127.0.0.1 0  0 1w0d  -1 
>>> df[df.State >=0 ]['Neighbour'] 
0  10.230.3.2 
1  10.230.4.2 
2 125.62.173.253 
3 125.62.173.254 
Name: Neighbour, dtype: object 
>>> df[df.State <0 ]['Neighbour'] 
4 127.0.0.1 
Name: Neighbour, dtype: object 

pandas ist über pip zur Verfügung.

+0

Hallo Nehal, Kann ich die Daten zu df über eine Textdatei hinzufügen? Weil ich so viele Daten habe und die Daten nicht manuell eingeben kann. – Anjali

+0

@Anjali Sicher, ja. Bitte lese: http://pandas.pydata.org/pandas-docs/stable/io.html –

+0

@Anjali Ich lese Nehals Dokumentation und poste eine ähnliche Lösung wie er, außer dass er die Daten aus dem Rohtabellenformat liest, wie du es verlangst . http://StackOverflow.com/a/38917796/1636276 – Tagc

0

Obwohl ich denke, Nehals Antwort mit Pandas ist sehr ideal für dieses Szenario.

Sie können auf diese Weise versuchen, so gut und tweek nach Ihren Anforderungs-

>>> for i in range(1, len(t)): 
...  temp = t[i].split() 
...  if int(temp[4]) >= 0: 
...   print temp[0] 
... 
10.230.3.2 
10.230.4.2 
125.62.173.253 
125.62.173.254 

Wenn Sie es in eine TXT-Datei schreiben möchten

t = tuple(open('source_filename', 'r')) 
tfile = open('destination_filename', 'a') 

for i in range(1, len(t)): 
    temp = t[i].split() 
    if int(temp[4]) >= 0: 
     tfile.write('%s\n' % temp[0]) 

tfile.close() 
+0

Hallo PEJK, Mein Temp druckt ['125.62.173.254', '0', '0', '1w3d', '2657'] für eine Iteration. Aber wenn ich temp [0]/temp [4] usw. mache, zeigt es mir Index außerhalb des Bereichs. Ich benutze Python 2.7, hat es etwas damit zu tun. Ich bin neu in Python, kann also den Grund für einen Fehler nicht identifizieren. – Anjali

+0

@Anjali: 'temp [0]' und 'temp [4]' sind Strings. Sie können 'temp [4]' in 'int' oder' float' konvertieren, aber nicht 'temp [0]'. – Ejaz

+0

aber wenn ich den Inhalt von temp [0] in eine andere Textdatei schreibe, zeigt es das Ergebnis als 10.230.3.210.230.4.2125.62.173.253125.62.173.254 Wie kann ich möglicherweise getrennte Ausgabe sicherstellen, wie ich die lesen möchte Ausgabe in einer Excel-Datei. – Anjali

0

Ich habe noch nie verwendet Pandas vor, aber ich lese Nehals verknüpfte Dokumentation und basierte diese Lösung auf his answer. Dies ist eine Reaktion auf Ihren Kommentar:

Kann ich die Daten zu df über eine Textdatei hinzufügen? Weil ich so viele Daten habe und die Daten nicht manuell eingeben kann.

Alles, was Sie tun müssen, um den Code zu lesen von Textdatei zu machen, ist die Verwendung von StringIO mit einem tatsächlichen Datei-Handle ersetzen (zum Beispiel with open("data_table.txt") as f:...).

from io import StringIO 
import pandas as pd 

DATA = """ 
Neighbor   InQ OutQ Up/Down State 
10.230.3.2   0 0 33w5d  1177 
10.230.4.2   0 0 33w4d  1175 
125.62.173.253  0 0 8w3d   2637 
125.62.173.254  0 0 1w3d   2657 
111.11.111.111  0 0 1w3d   -1 
""" 


def main(): 
    data_io = StringIO(DATA) 
    table = pd.read_table(data_io, sep='\s+') 

    print("Valid neighbours:\n{}\n".format(table[table.State >= 0]['Neighbor'])) 
    print("Invalid neighbours:\n{}".format(table[table.State < 0]['Neighbor'])) 


if __name__ == '__main__': 
    main() 

Ausgabe

Valid neighbours: 
0  10.230.3.2 
1  10.230.4.2 
2 125.62.173.253 
3 125.62.173.254 
Name: Neighbor, dtype: object 

Invalid neighbours: 
4 111.11.111.111 
Name: Neighbor, dtype: object