Цикл по столбцам в файлах .csv в Python - PullRequest
4 голосов
/ 16 марта 2010

Я хочу использовать Python для открытия файла .csv, например:

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

, а затем выполните с ними некоторую операцию, например сложение.

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]) 

Проблема в том, что поскольку файл .csv имеет только одну строку и неизвестное количество столбцов, я не знаю, как заставить это работать без жесткого кодирования или использования действительно уродливого кода.

Есть ли способ циклически проходить по столбцам, используя что-то вроде for columns in file в Python?

Ответы [ 2 ]

8 голосов
/ 16 марта 2010

Вы можете просто сказать

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

Например:

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

Причина, по которой вы можете сделать это, заключается в том, что csv.reader возвращает простой список для каждой строки, поэтому вы можете выполнять итерации по нему, как и любой другой список в Python.

Однако, в вашем случае, поскольку вы знаете, что у вас есть файл с одной строкой целых чисел, разделенных запятыми, вы можете сделать это намного проще:

line = open("ints.txt").read().split(",")
total = sum(int(i) for i in line)
3 голосов
/ 16 марта 2010

Вы можете перебирать список столбцов так же, как вы перебираете строки в программе чтения csv:

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

Или вы можете добавить сумму каждой строки на каждом проходе и пропустить внутренний цикл:

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

Или вы можете сохранить создание дополнительного списка, используя itertools.imap вместо map.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...