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

有几点可以改进:

  1. values = (line.split(', ') for line in file)values分配一个生成器(注意看似无辜的括号),而生成器没有isdigit。您已经在使用 for 循环,因此您不需要生成器(实际上您不应该)。

  2. 在更正后的代码中,values 现在是一个字符串列表。所以你需要使用 values[1] 来访问列表中的一个项目,然后 然后 应用 isdigit.

  3. 您将在每次迭代中重置 numbers。在循环之前启动变量

  4. values[1] 是一个字符串,因此为了将其添加到 numbers,您需要 int.

  5. % 是取模运算符。使用 / 进行(实数)除法。

  6. 使用硬编码数字(在这种情况下,用 特定的 数字 4 来除某物)不是最佳选择。您可能需要另一种方法来获取记录数。