通过在.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的列循环?

+0

csv文件是非常大的,还是可以将整个文件读入内存? – unutbu 2010-03-16 18:54:13

+0

它非常小,与我在问题中提供的示例.csv文件非常相似。 – 2010-03-16 18:54:58

你就可以说

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) 
+1

谢谢你,完美的工作。我感到愚蠢的没有得到:) 但是因为我在这里,我想知道,不会有一个“内置的”Python函数,允许你通过一个循环执行一些操作? (所以在开始时不需要初始化一个“总”值,我不确定它将如何实现)我问,因为Python往往会简化很多事情。 但是,再次感谢大家的答复。他们是惊人的 – 2010-03-16 19:10:35

+0

减少(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来保存创建额外的列表。