2017-02-15 3 views
0

Ich habe eine Textdatei, aus der ich Spalten und Daten extrahieren möchte. Es folgt ein Beispiel der Daten:Hinzufügen von Feldern zu Spalten aus Textdatei mit Python

-Global stats enabled 
Cpu Utilization : 0.1 % 45.4 Gb/core 
Platform_factor : 1.0 
Total-Tx  :  270.75 Mbps 
Total-Rx  :  0.00 bps 
Total-PPS  :  37.98 Kpps 
Total-CPS  :  0.00 cps 

Expected-PPS :  102.71 Kpps 
Expected-CPS :  2.78 Kcps 
Expected-BPS :  764.51 Mbps 

Active-flows :  366 Clients :  252 Socket-util : 0.0023 %  
Open-flows  :  2792 Servers : 65534 Socket :  366 Socket/Clients : 1.5 
drop-rate  :  270.75 Mbps 
current time : 7.6 sec 
test duration : 3592.4 sec 

-Latency stats enabled 
Cpu Utilization : 0.0 % 
if| tx_ok , rx_ok , rx check ,error,  latency (usec) , Jitter   max window 
    |   ,  ,   ,  , average , max , (usec)      
---------------------------------------------------------------------------------------------------------------- 
0 |  1116,  0,   0, 0,   0 ,  0,  0  | 0 0 0 0 0 0 0 0 0 0 0 0 0 
1 |  1116,  0,   0, 0,   0 ,  0,  0  | 0 0 0 0 0 0 0 0 0 0 0 0 0 
2 |  1116,  0,   0, 0,   0 ,  0,  0  | 0 0 0 0 0 0 0 0 0 0 0 0 0 
3 |  1116,  0,   0, 0,   0 ,  0,  0  | 0 0 0 0 0 0 0 0 0 0 0 0 0 
[2J[2H 
-Per port stats table 
     ports |    0 |    1 |    2 |    3 
----------------------------------------------------------------------------------------- 
    opackets |   30391 |   48748 |   30360 |   48696 
    obytes |   2468147 |  68386300 |   2465677 |  68310324 
    ipackets |    0 |    0 |    0 |    0 
    ibytes |    0 |    0 |    0 |    0 
    ierrors |    0 |    0 |    0 |    0 
    oerrors |    0 |    0 |    0 |    0 
     Tx Bw |  4.77 Mbps |  130.69 Mbps |  4.76 Mbps |  130.53 Mbps 

ich ergreifen müssen, um Spalten von Einträgen erstellen wie Total-Tx, Drop-Rate, etc ... Dann fügen Sie den Wert für jede Iteration von diesen, in eine neue Reihe.

Zur Zeit kann ich die Spalten extrahieren, aber Hilfe benötigen Sie die Zeilen mit den entsprechenden Daten in die CSV-Datei hinzuzufügen:

import csv 
import itertools 

with open('output.txt', 'r') as in_file: 
    stripped = (line.strip() for line in in_file) 
    lines = (line for line in stripped if line) 
    grouped = itertools.izip(*[lines] * 4) 
    with open('output_stats.csv', 'w') as out_file: 
     writer = csv.writer(out_file) 
     writer.writerow(('current time', 'drop-rate', 'Total-Tx', 'Total-Rx')) 
     writer.writerows(grouped) 

Antwort

0

Haben Sie und speichern Sie die Einträge in -Global stats enabled Abschnitt analysieren möchten?

Mit regex vielleicht Overkill, würde ich vorschlagen, Sie verwenden einige grundlegende Zeichenfolge split.

Für Strecken mit nur einem Doppelpunkt : drin (Sie str.count) verwenden, split(:) verwendet, wird eine Liste aus zwei Elementen, mit der linken Seite als Schlüssel und die rechte Seite als Wert angegeben werden.

Für Leitungen mit mehr als einem Doppelpunkt, können Sie zunächst durch Doppelpunkte und Räume aufgeteilt, wobei besonderes Augenmerk auf die % in Socket-util. Es wird eine Liste von [key1, value1, key2, value2, ...] geben (müssen möglicherweise die Liste glätten, siehe Making a flat list out of list of lists in Python).

Dann können Sie die Schlüssel schreiben als Spaltennamen und ihre entsprechenden Werte

Falls Sie die ASCII-Tabelle im Abschnitt -Latency stats enabled analysieren und speichern möchten, können Sie versuchen, pandas zu verwenden, siehe How to create a Pandas DataFrame from String.

+0

Ja, an dieser Stelle muss ich nur Einträge für Zeilen speichern, die ':' enthalten, so kann ich 'split (:)' danke verwenden, werde dies versuchen –

Verwandte Themen