0

我真的又一次被困住了。

对于我的课程,问题是

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

好的,所以我发现了问题,现在已经解决了!!但是当我使用“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”对象不可迭代

这就是总和...有什么建议吗?我想不出任何东西,因此我问的原因。

4

2 回答 2

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

于 2012-05-06T21:39:46.647 回答
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)
于 2012-05-06T21:27:06.320 回答