【问题标题】:Jython CSV connectionJython CSV 连接
【发布时间】:2011-02-23 06:55:13
【问题描述】:

嗨 我有一个如下给出的代码

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

【问题讨论】:

    标签: jython


    【解决方案1】:

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

    可以在 for 循环的每次迭代中使用正则表达式从 line 中提取值,但最好只使用 the csv module 而不是编写自己的广告-临时 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] 等中找到的值来做任何复杂的事情。

    更新:在下面的评论中你问“有什么方法可以让我执行返回语句的次数与 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
    

    这将依次打印每行第二列和第三列的乘积。

    【讨论】:

    • 我想做的是一次从一行中提取数据并执行代码,并将值参数化到代码中。
    • @user619348:我添加了一个示例,展示如何使用 CSV 模块对第二列中的值求和 - 但是,您可以使用 row[0]、row[1]、等在内循环中。
    • 我在 soa 测试软件 parasoft soatest 中编写此代码。一旦我运行测试步骤,包含的代码将从 csv 文件中提取第一个数据,将值放入步骤并运行一些东西。此 shd 对 csv 文件中的所有行进行。
    • @user619348:是的,我认为这个例子就是你想要的——你只需要用“运行某事”的意思替换total += float(row[1])。无论如何,我已经整理了我的答案。
    • 有什么方法可以让返回语句的执行次数与 csv 文件中的行数一样多。?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 2019-06-14
    相关资源
    最近更新 更多