Jython CSV соединение - PullRequest
       11

Jython CSV соединение

0 голосов
/ 23 февраля 2011

Привет, у меня есть код, указанный ниже

def value():
    file=open('C:/Documents and Settings/242481/My Documents/file.csv','r')
    for line in file:
        return "<TOTAL>"+line+"</TOTAL>"

, когда я выполняю сценарий, возвращается только первая строка файла CSV.как получить все строки в файле csv в цикле for.

Заранее спасибо: Aadith

1 Ответ

0 голосов
/ 23 февраля 2011

Это потому, что 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

Это будет печатать произведение второго и третьего столбца каждой строки по очереди.

...