Это потому, что return
возвращается из функции с первой строкой на первой итерации цикла.
Вы могли бы извлечь значения из line
на каждой итерациицикл for с использованием регулярных выражений, но гораздо лучше использовать просто модуль csv
вместо написания собственного специального анализатора CSV.Это означает, что вам не нужно беспокоиться о правилах цитирования, например.В качестве примера, предположим, что вы хотите получить сумму всех чисел во втором столбце, вы можете сделать:
import csv
def total_of_second_column():
total = 0.0
fp = open('C:/Documents and Settings/242481/My Documents/file.csv')
try:
cr = csv.reader(fp)
for row in cr:
total += float(row[1])
return total
finally:
fp.close()
... хотя, конечно, вы можете сделать что-нибудь произвольно сложное со значениямиВы найдете в row[0]
, row[1]
и т. д. на каждой итерации цикла for.
Обновление: В приведенном ниже комментарии вы спрашиваете "есть ли способ, которым яможет выполнить оператор return столько раз, сколько строк в файле csv .?"
Звучит так, как будто вы ищете ключевое слово yield
здесь.Есть отличное объяснение генераторов и yield
в вопросе Ключевое слово Python yield объяснило , но, чтобы дать краткий пример того, как вы можете использовать его в своем примере, вы можете сделать:
def two_column_products():
fp open('C:/Documents and Settings/242481/My Documents/file.csv')
try:
cr = csv.reader(fp)
for row in cr:
yield float(row[1]) * float(row[2])
finally:
fp.close()
for result in two_column_products():
print "got result:", result
Это будет печатать произведение второго и третьего столбца каждой строки по очереди.