Python 如何读取CSV?错误消息
我真的再一次陷入困境 对于我的课程,问题是 从3个CSV文件中找到[age]字段中小于47的值之和 好的,我发现了问题,现在已经解决了!!但是我现在在使用“SUM”函数时遇到了一个错误 这是我的代码。。。抱歉,我浪费了你们的时间,伙计们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:
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