2017-07-18 130 views
-1

我有以下的代码返回以下错误:ValueError异常:无效的基数为10字面INT():“年龄”

ValueError: invalid literal for int() with base 10: 'age' 

注:我已经通过了类似的错误在其他问题看,但这与他们每个人都不相同。

我在另一个关于求和csv文件中列的值的另一个stackoverflow问题中注意到,此代码工作,所以我不确定它为什么不能在这里工作。这是Python的3

import csv 

def main(): 
    total_age = 0 
    with open("names_ages.csv","r") as names_ages: 
     names_agesReader=csv.reader(names_ages) 


    #for row in csv.reader(textlines[1:]): 
     for row in names_agesReader: 
      total_age += int(row[1]) 
      print(total_age) 

     #print("The total age is:", total_age) 

main() 

我是一个 )与解释 b修正错误的解决方案衷心的)建议,以解决同一问题的更优雅的方式,如果有

UPDATE:感谢阿卜杜,头问题已经确定:现在

更新的代码仍然会产生一个逻辑错误:

项文件内容

name age 
Alice 1 
Bob 2 
Charles 3 

更新的代码

import csv 
    def main(): 

     with open("names_ages.csv","r") as names_ages: 
      names_agesReader=csv.reader(names_ages) 


     #for row in csv.reader(textlines[1:]): 
      total_age = 0 
      next(names_agesReader) 
      for row in names_agesReader: 
       total_age += float(row[1]) 
       print(total_age) 

      #print("The total age is:", total_age) 

    main() 

错误的输出: - 这是固定的(identation错误)

1.0 
3.0 
6.0 
>>> 

工作正常 -

total_age = 0 
     next(names_agesReader) 
     for row in names_agesReader: 
      total_age += float(row[1]) 
     print(total_age) 

感谢阿卜杜

+2

在文件中有标题吗?如果是这样,你试图将一个头(这是一个字符串)转换为一个整数。您应该在'for-loop'之前加上'next(names_agesReader)'来跳过标题。 – Abdou

+0

这真的很有用......你可以发布一个解决方案,内置你的答案。完整的代码在上面?这将是最有帮助的。很多教程都没有经过从CSV读取时涉及头的事实。这是CSV和.txt文件的主要区别 - CSV文件是否始终具有自动标头? – MissComputing

+0

请参阅下面的答案。 – Abdou

回答

1

您必须在文件中的标头。每个CSV文件都有它自己的怪癖。有些来自标题,其他则没有。您有责任确定文件是否包含标题。您可以使用命令行工具head来查看第一行的样子:

head -n1 filename.csv通常可以完成工作。你也可以让Python为你做,但底线是你必须找出第一行是否是标题行。

下基本上是跳过标题行,并通过数据迭代自己:

import csv 

def main(): 
    total_age = 0 
    with open("names_ages.csv","r") as names_ages: 
     names_agesReader=csv.reader(names_ages) 
     next(names_agesReader) # skipping the headers 

    #for row in csv.reader(textlines[1:]): 
     for row in names_agesReader: 
      total_age += int(row[1]) 
     # print(total_age) 

     print("The total age is:", total_age) 

main() 

这应该做的。

+0

辉煌,谢谢。它不让我接受答案,但我会回来这样做。 – MissComputing

+0

因此,print(head -n1 filename.csv)会给我头部信息? (什么是-n1)。 – MissComputing

+0

'head -n1 filename.csv'只适用于命令行(python外部)。这在Python中不起作用。该命令用于Mac的'Terminal'应用程序和Windows的'cmd'应用程序。 – Abdou

相关问题