AttributeError: 'generator' object has no attribute 'isdigit'
AttributeError: 'generator' object has no attribute 'isdigit'
我正在尝试浏览我创建的这个文件,并且只提取文件中人物的年龄。然后取年龄的平均值并打印出来。我试图遍历文件中的行,它说生成器对象没有属性。我正在使用 python 3 并且我注释掉了我之前使用的一些代码,所以我不必担心它。我也不知道我是否应该使用注释代码,但我只是害怕失去到目前为止的所有想法。如果我无法迭代,如何在循环中获取这些年龄?
f = open('myfile.txt','w')
f.write('Name, Age, Gender, Profession\n')
f.write('Harry, 23, Male, Software Engineer\n')
f.write('Sam, 25, Male, Lawyer\n')
f.write('Lisa, 29, Female, Computer Scientist\n')
f.write('Mary, 22, Female, Doctor\n')
f.close()
# print(readFile.read())
# readFile = open("myfile.txt")
with open('myfile.txt', 'r') as file:
for line in file:
values = (line.split(', ') for line in file)
if values.isdigit[1] == True:
numbers = 0
numbers += values
average = numbers % 4
print(average)
尝试:
f = open('myfile.txt','w')
f.write('Name, Age, Gender, Profession\n')
f.write('Harry, 23, Male, Software Engineer\n')
f.write('Sam, 25, Male, Lawyer\n')
f.write('Lisa, 29, Female, Computer Scientist\n')
f.write('Mary, 22, Female, Doctor\n')
f.close()
with open('myfile.txt', 'r') as file:
numbers = 0
for line in file:
values = line.split(', ')
if values[1].isdigit() == True:
numbers += int(values[1])
average = numbers / 4
print(average) # 24.75
有几点可以改进:
values = (line.split(', ') for line in file)
给values
分配一个生成器(注意看似无辜的括号),而生成器没有isdigit
。您已经在使用 for
循环,因此您不需要生成器(实际上您不应该)。
在更正后的代码中,values
现在是一个字符串列表。所以你需要使用 values[1]
来访问列表中的一个项目,然后 然后 应用 isdigit
.
您将在每次迭代中重置 numbers
。在循环之前启动变量。
values[1]
是一个字符串,因此为了将其添加到 numbers
,您需要 int
.
%
是取模运算符。使用 /
进行(实数)除法。
使用硬编码数字(在这种情况下,用 特定的 数字 4
来除某物)不是最佳选择。您可能需要另一种方法来获取记录数。
我正在尝试浏览我创建的这个文件,并且只提取文件中人物的年龄。然后取年龄的平均值并打印出来。我试图遍历文件中的行,它说生成器对象没有属性。我正在使用 python 3 并且我注释掉了我之前使用的一些代码,所以我不必担心它。我也不知道我是否应该使用注释代码,但我只是害怕失去到目前为止的所有想法。如果我无法迭代,如何在循环中获取这些年龄?
f = open('myfile.txt','w')
f.write('Name, Age, Gender, Profession\n')
f.write('Harry, 23, Male, Software Engineer\n')
f.write('Sam, 25, Male, Lawyer\n')
f.write('Lisa, 29, Female, Computer Scientist\n')
f.write('Mary, 22, Female, Doctor\n')
f.close()
# print(readFile.read())
# readFile = open("myfile.txt")
with open('myfile.txt', 'r') as file:
for line in file:
values = (line.split(', ') for line in file)
if values.isdigit[1] == True:
numbers = 0
numbers += values
average = numbers % 4
print(average)
尝试:
f = open('myfile.txt','w')
f.write('Name, Age, Gender, Profession\n')
f.write('Harry, 23, Male, Software Engineer\n')
f.write('Sam, 25, Male, Lawyer\n')
f.write('Lisa, 29, Female, Computer Scientist\n')
f.write('Mary, 22, Female, Doctor\n')
f.close()
with open('myfile.txt', 'r') as file:
numbers = 0
for line in file:
values = line.split(', ')
if values[1].isdigit() == True:
numbers += int(values[1])
average = numbers / 4
print(average) # 24.75
有几点可以改进:
values = (line.split(', ') for line in file)
给values
分配一个生成器(注意看似无辜的括号),而生成器没有isdigit
。您已经在使用for
循环,因此您不需要生成器(实际上您不应该)。在更正后的代码中,
values
现在是一个字符串列表。所以你需要使用values[1]
来访问列表中的一个项目,然后 然后 应用isdigit
.您将在每次迭代中重置
numbers
。在循环之前启动变量。values[1]
是一个字符串,因此为了将其添加到numbers
,您需要int
.%
是取模运算符。使用/
进行(实数)除法。使用硬编码数字(在这种情况下,用 特定的 数字
4
来除某物)不是最佳选择。您可能需要另一种方法来获取记录数。