通过在.csv文件列在Python
循环我希望能够使用Python打开.csv
文件是这样的:通过在.csv文件列在Python
5,26,42,2,1,6,6
,然后对他们进行类似此外,一些操作。
total = 0
with open("file.csv") as csv_file:
for row in csv.reader(csv_file, delimiter=','):
for number in range(7):
total += int(row[number])
的问题是,由于.csv
文件只有一个行和列的数目不详的,我不知道如何使这项工作没有任何硬编码什么样子,或者使用真正丑陋的代码。
是否有任何方式在Python中使用类似for columns in file
的列循环?
你就可以说
for col in row:
total += int(col)
例如:
import csv
from StringIO import StringIO
total = 0
for row in csv.reader(StringIO("1,2,3,4")):
for col in row:
total += int(col)
print total # prints 10
你之所以能做到这一点的是,csv.reader的每一行返回一个简单的列表,这样你就可以遍历就像你在Python中的任何其他列表一样。
然而,在你的情况,因为你知道你有一个逗号分隔的整数的单行文件,你可以让这个更简单:
line = open("ints.txt").read().split(",")
total = sum(int(i) for i in line)
谢谢你,完美的工作。我感到愚蠢的没有得到:) 但是因为我在这里,我想知道,不会有一个“内置的”Python函数,允许你通过一个循环执行一些操作? (所以在开始时不需要初始化一个“总”值,我不确定它将如何实现)我问,因为Python往往会简化很多事情。 但是,再次感谢大家的答复。他们是惊人的 – 2010-03-16 19:10:35
减少(http://docs.python.org/library/functions.html#reduce)这样做,但皱起了眉头。 Guido解释道(http://artima.com/weblogs/viewpost.jsp?thread=98196):“除了涉及+或*的几个例子之外,几乎每次我看到带有非平凡函数参数的reduce调用时,我需要用笔和纸来绘制实际上被输入到该函数中的内容,然后才能理解reduce的作用,因此在我看来,reduce()的适用性几乎局限于关联运算符,并且在所有其他情况下明确地写出积累循环更好。“ – 2010-03-16 20:16:45
可以遍历列的列表就像你遍历行的CSV阅读:
total = 0
with open("file.csv") as csv_file:
for row in csv.reader(csv_file, delimiter=','):
for col in row:
total += int(col)
也可以添加在每次通过各行的总和,并跳过内环:
total = 0
with open("file.csv") as csv_file:
for row in csv.reader(csv_file, delimiter=','):
total += sum(map(int, row))
或者您可以使用itertools.imap
而不是map
来保存创建额外的列表。
csv文件是非常大的,还是可以将整个文件读入内存? – unutbu 2010-03-16 18:54:13
它非常小,与我在问题中提供的示例.csv文件非常相似。 – 2010-03-16 18:54:58