您好 我有一个代码,如下所示
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
答案 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
这将依次打印每行第二和第三列的产品。