Python 如何读取CSV?错误消息

Python 如何读取CSV?错误消息,python,python-3.x,Python,Python 3.x,我真的再一次陷入困境 对于我的课程,问题是 从3个CSV文件中找到[age]字段中小于47的值之和 好的,我发现了问题,现在已经解决了!!但是我现在在使用“SUM”函数时遇到了一个错误 这是我的代码。。。抱歉,我浪费了你们的时间,伙计们 import csv myFile = csv.reader(open('3028571a.csv', newline=''), delimiter=',', quotechar='|') next(myFile) for record in myFile:

我真的再一次陷入困境

对于我的课程,问题是

从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)
导入csv
myFile=csv.reader(打开('3028571a.csv',换行符=''),分隔符=',',引号='|')
下一个(我的文件)
对于myFile中的记录:
记录=int(记录[0])
如果记录小于47:
总数(记录)
打印(记录)
就像五张唱片,但我收到的错误是

TypeError:“int”对象不可编辑


这就是总和。。。有什么建议吗?我想不出任何事情,因此我提出了这个问题。

这可能对您有一些帮助:

基本上,向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)
导入csv
导入系统
agecol=1
namecol=0
年龄限制=47
定义总和(文件):
年龄总和=0
对于文件中的f:
以开放式(f,'r')作为fp:
reader=csv.reader(fp)
对于读取器中的行:
年龄=整数(第[agecol]行)
名称=行[namecol]
如果年龄<年龄限制:
打印“添加%s的年龄(%d)”%(姓名,年龄)
年龄总和+=年龄
其他:
打印“跳过%s的年龄(%d)”%(姓名,年龄)
打印“年龄总和<%d:%d%”(年龄限制,年龄总和)

这可能对您有所帮助:

基本上,向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)
导入csv
导入系统
agecol=1
namecol=0
年龄限制=47
定义总和(文件):
年龄总和=0
对于文件中的f:
以开放式(f,'r')作为fp:
reader=csv.reader(fp)
对于读取器中的行:
年龄=整数(第[agecol]行)
名称=行[namecol]
如果年龄<年龄限制:
打印“添加%s的年龄(%d)”%(姓名,年龄)
年龄总和+=年龄
其他:
打印“跳过%s的年龄(%d)”%(姓名,年龄)
打印“年龄总和<%d:%d%”(年龄限制,年龄总和)

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)
csv.reader中的行的
sum(int(第[0]行))(如果int(第[0]行)小于47,则打开文件中的f(f,“rb”))

当然,这并不是真正的家庭作业——它只是使用Python的内置工具为您完成。如果您想自己做,您必须手动读取文件的每一行,根据分隔符进行拆分,可能需要担心引号中的逗号(不应算作逗号)。。。换句话说,重新实现
csv.reader

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)
csv.reader中的行的
sum(int(第[0]行))(如果int(第[0]行)小于47,则打开文件中的f(f,“rb”))

当然,这并不是真正的家庭作业——它只是使用Python的内置工具为您完成。如果您想自己做,您必须手动读取文件的每一行,根据分隔符进行拆分,可能需要担心引号中的逗号(不应算作逗号)。。。换句话说,重新实现
csv.reader

你的努力真的达到了这个程度吗?你应该读一下,看看它给出的例子。您应该注意的第一件事是,示例没有使用裸
打开
来打开文件;相反,他们使用
csv.reader
来包装文件。我之所以这样问是因为这是一个家庭作业:您是否需要手动解析csv数据(即,您正在学习文件访问和字符串操作)或者您被允许使用
csv
module?解析,因此我不允许编辑csv源文件。编辑似乎从根本上改变了这个问题的范围,使得答案不。。很有道理。。再也不会了。也许你想问另一个问题?这真的是你努力的程度吗?你应该读一下,看看它给出的例子。您应该注意的第一件事是,示例没有使用裸
打开
来打开文件;相反,他们使用
csv.reader
来包装文件。我之所以这样问是因为这是一个家庭作业:您是否需要手动解析csv数据(即,您正在学习文件访问和字符串操作)或者您被允许使用
csv
module?解析,因此我不允许编辑csv源文件。编辑似乎从根本上改变了这个问题的范围,使得答案不。。很有道理。。再也不会了。也许你想问另一个问题?遵循医生的指示很重要。必须以二进制模式打开文件进行读取。对于家庭作业,保持代码干净也很重要——必须使用
open()
配对。close()
结构。保留Python文档中建议的约定也是很好的,因为它在其他人看来并不罕见。例如,
csv.reader()
通常分配给
reader
变量。另外,
文件
应该是
文件名
。希望将一些工作留给OP。不要不同意re:使用真正的文件句柄并关闭它。但是,变量名呢?真的吗?是的。变量名对于避免混淆非常重要。例如,
f
通常用于文件对象(打开的文件)。在Python中,您没有使用文件句柄。此外,任何文件句柄都不能是clos