2017-07-18 181 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

相關問題