Jython CSV连接

时间:2011-02-23 06:55:13

标签: jython

您好  我有一个代码,如下所示

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

当我执行脚本时,只返回csv文件的第一行。 如何在for循环中获取csv文件中的所有行。

提前致谢:Aadith

1 个答案:

答案 0 :(得分:0)

那是因为return从函数返回第一次迭代的第一行到循环。

可以使用正则表达式在for循环的每次迭代中从line中提取值,但是使用the csv module而不是写作更好一点你自己的ad-hoc 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()

...当然,在for循环的每次迭代中,您可以使用row[0]row[1]等中找到的值进行任意复杂的操作。

更新:在下面的评论中,您要求“我有什么方法可以执行return语句的次数与csv文件中的行数一样多。?”

听起来好像您可能在这里寻找yield关键字。问题The Python yield keyword explained中有关于生成器和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

这将依次打印每行第二和第三列的产品。