Looping durch Spalten in einer CSV-Dateien in Python

stimmen
4

Ich möchte in der Lage sein , Python zu verwenden , um eine zu öffnen .csvDatei wie folgt:

5,26,42,2,1,6,6

und dann eine Operation durchführen zu ihnen wie Addition.

total = 0
with open(file.csv) as csv_file:
        for row in csv.reader(csv_file, delimiter=','):
            for number in range(7):
                total += int(row[number]) 

Das Problem ist , dass , da die .csveinzige Datei eine Zeile und eine unbekannte Anzahl von Spalten hat, ich weiß nicht , wie diese Arbeit zu machen , ohne entweder Hartcodierung es mag oder wirklich hässlich Code.

Gibt es einen Weg durch die Spalten von Schleifen mit so etwas wie for columns in filein Python?

Veröffentlicht am 16/03/2010 um 19:51
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
8

Sie können nur sagen,

for col in row:
    total += int(col)

Beispielsweise:

import csv
from StringIO import StringIO

total = 0
for row in csv.reader(StringIO("1,2,3,4")):
    for col in row:
        total += int(col)

print total    # prints 10

Der Grund, warum Sie dies tun können, ist, dass csv.reader für jede Zeile eine einfache Liste zurückgibt, so können Sie über sie iterieren wie jede andere Liste in Python.

Aber in Ihrem Fall, da Sie wissen, dass Sie eine Datei mit einer einzigen Zeile durch Kommata getrennte Zahlen haben, können Sie diese viel einfacher machen:

line = open("ints.txt").read().split(",")
total = sum(int(i) for i in line)
Beantwortet am 16/03/2010 um 19:55
quelle vom benutzer

stimmen
3

Sie können über eine Liste von Spalten durchlaufen wie Sie über die Zeilen in einer CSV-Leser durchlaufen:

total = 0
with open("file.csv") as csv_file:
   for row in csv.reader(csv_file, delimiter=','):
        for col in row:
            total += int(col)

Oder Sie können die Summe jeder Zeile bei jedem Durchlauf hinzufügen, und lassen Sie den Looping:

total = 0
with open("file.csv") as csv_file:
   for row in csv.reader(csv_file, delimiter=','):
        total += sum(map(int, row))

Oder Sie können durch die Verwendung einer zusätzlichen Liste erstellen speichern itertools.imapstatt map.

Beantwortet am 16/03/2010 um 20:01
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more