如何阅读CSV?错误信息

时间:2012-05-06 21:08:26

标签: python python-3.x

我真的再次陷入困境。

我的课程作业是

  

查找字段[age]中小于47的值的总和,该值来自3个CSV文件

好的,所以我发现了问题,现在已经修复了!!但是当我使用“SUM”功能时,我现在收到错误。

这里是我的代码...对不起,如果我浪费你的时间。

import csv
myFile = csv.reader(open('3028571a.csv', newline=''), delimiter=',', quotechar='|')

next(myFile)

for record in myFile:
   records = int(record[0])
   if records < 47:
        sum(records)
        print(records)

它像五条记录,但我收到的错误是

  

TypeError:'int'对象不可迭代

那是总和位...有什么建议吗?我无法想到任何事情,因此我问的原因。

2 个答案:

答案 0 :(得分:2)

Python已经拥有出色的CSV解析器,处理各种分隔符,转义分隔符等。它被称为csv.reader,它位于csv模块中。您可以按如下方式使用它:

sum(int(row[0]) for row in csv.reader(open(f, "rb")) for f in files if int(row[0]) < 47)

当然,这并不是真正做功课 - 它只是使用Python的内置工具来为你完成。如果你想自己动手,你必须手动读取文件的每一行,根据分隔符将其拆分,或者担心引号中的逗号(不应该算作逗号)......换句话说,重新实施csv.reader

答案 1 :(得分:1)

这可能对你有用:http://docs.python.org/library/csv.html

基本上,你将csv.reader()函数传递给文件句柄,然后就可以循环遍历各行。

也许有些事情如下:

import csv
import sys

agecol = 1
namecol = 0
agelimit = 47

def sum_ages(files):
    agesum = 0
    for f in files:
        with open(f, 'r') as fp:
            reader = csv.reader(fp)
            for row in reader:
                age = int(row[agecol])
                name = row[namecol]
                if age < agelimit:
                    print 'Adding %s\'s age (%d)' % (name, age)
                    agesum += age
                else:
                    print 'Skipping %s\'s age (%d)' % (name, age)

    print 'Sum of Ages < %d: %d' % (agelimit, agesum)