我真的再次陷入困境。
我的课程作业是
好的,所以我发现了问题,现在已经修复了!!但是当我使用“SUM”功能时,我现在收到错误。查找字段[age]中小于47的值的总和,该值来自3个CSV文件
这里是我的代码...对不起,如果我浪费你的时间。
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'对象不可迭代
那是总和位...有什么建议吗?我无法想到任何事情,因此我问的原因。
答案 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)