2017-08-30 3 views
0

Ich bin neu beim Schreiben von Python und dachte, ich würde einige meiner Programme, die in Perl sind, neu schreiben. Ich habe eine tabulatorgetrennte Datei, in der die Spalten 9 bis zum Ende (die variieren) weiter aufgeteilt werden müssen und dann die Summe des Teils dieser Spalte hinzugefügt wird (nur bei den Spalten 9-12):Python: Berechnen Sie die Summe einer Spalte nach dem Spalten der Spalte

0:0:1:0 0:0:2:0 0:0:3:0 0:0:4:0 
0:0:1:0 0:0:2:0 0:0:3:0 0:0:4:0 
0:0:1:0 0:0:2:0 0:0:3:0 0:0:4:0 
0:0:1:0 0:0:2:0 0:0:3:0 0:0:4:0 

Ausgang (Summe jeder Spalte [2]:

4 
8 
12 
16 

Alles, was ich bisher bekommen habe ist

 datacol = line.rstrip("\n").split("\t") 
     for element in datacol[9:len(datacol)]: 
      splitcol=int(element.split(r":")[2]) 
      totalcol += splitcol 
     print(totalcol) 

was nicht funktioniert und gibt mir die Summe der Spalte [2] für jede Zeile.

Dank

Antwort

0
mysum = 0 
    with open('myfilename','r') as f: 
    for line in f: 
    mysum += int(line.split()[3]) 

    line.split() will turn "123 Hammer 20 36" into ["123", "Hammer", "20", "36"]. 

Wir nehmen den vierten Wert 36 den Index [3]. Dies ist immer noch eine Zeichenkette und kann mit Hilfe von float in eine Ganzzahl mit int oder einer Dezimalzahl (Gleitkommazahl) umgewandelt werden.

um nach leeren Zeilen zu suchen, fügen Sie die Bedingung if Zeile: in der for-Schleife hinzu. In Ihrem speziellen Fall, dass Sie so etwas wie tun könnte:

for line in f: 
    words = line.split() 
    if len(words)>3: 
     mysum += int(words[3]) 
+0

Ich kann nicht verstehen, was Sie geschrieben haben, aber wenn ich es versuchte ich immer noch die Antwort der Summe der Zeilen (10, 10, 10,10). Ich möchte 4,8,12,16 – HMR

0

Try this:

totalcol = [0,0,0,0] #Store sum results in a list 
with open('myfilename','r') as f: 
for line in f 
    #split line and keep columns 9,10,11,12 
    #assuming you are counting from 1 and have only 12 columns 
    datacol = line.rstrip("\n").split("\t")[8:] #lists start at index 0! 
    #Loop through each column and sum the 3rd element 
    for i,element in enumerate(datacol): 
     splitcol=int(element.split(":")[2]) 
     totalcol[i] += splitcol 
print(totalcol) 
+0

Vielen Dank WombatPM! Es funktioniert großartig. Ich habe es leicht bearbeitet, weil totalcol = [0,0,0,0] die Größe einer Liste annimmt. Also habe ich eine leere Liste erstellt und ihre Größe basierend auf der Anzahl der Spalten, die ich gerade bearbeite, erstellt. – HMR

Verwandte Themen