2012-11-18 12 views
0

我試圖使用下面的代碼來獲取文本文件中的行總數。AttributeError當計數器的結果,但不是一個普通的整數

totallines = 0 
for line in infile: 
    totallines += 1 

它的工作原理,並可以打印正確的編號到shell。然而,當我把結果賦值給:

item[i] = item[i].lower() 

但是,如果我刪除行櫃檯,並用其替換:

item = [0]*totallines 

迫使當給定的行成小寫與我得到一個AttributeError文本文件中的行數。它完美的作品。

我該如何解決這個問題?

+3

如果'item = [0] * totallines',那麼'item = [0,0,...,0]'和item [i] = 0,那麼'lowlow()'應該是什麼意思? –

+0

item = [0] * 24雖然有效,這讓我感到困惑。 – user1724602

+0

那麼,爲什麼不發佈你的確切代碼,'lower()'是一個字符串方法,只能用於字符串。因此'item'必須包含字符串而不是整數。 –

回答

3

這聽起來像你想將輸入文件的行轉換爲小寫並將結果存儲在數組中。你可以這樣來做:

with open('myfile.txt', 'r') as infile: 
    items = [line.lower() for line in infile] 

或(有點)等效,(這一個滴 「\ n」 在每行的末尾):

with open('myfile.txt', 'r') as infile: 
    items = infile.read().lower().splitlines() 

注:不要使用file作爲變量名稱,因爲它掩蓋了內置的file類型。

+0

然後'totallines = len(物品)'...... – martineau

+1

@Joel Cornett:人們總是使用'file',因爲它幾乎不需要明確引用(所以通常隱藏它並不重要)。 – martineau

+0

@martineau:有道理。我猜以類似的方式,我總是使用'string',因爲我很少導入'string'模塊。 –

0

我不完全確定你想要達到的目標。 item = [0]*totallines的目的是什麼?這將創建一個長度等於totallines的0的列表。

如果你想將文件複製到一個列表,並訪問指定的線(比如,第六行),你這是怎麼做到這一點:

item = [] 
for line in infile: 
    item.append(line) 

print(item[5].lower()) 

,或者更簡潔,採用了內置文件對象的方法:

item = infile.readlines() 
print(item[5].lower()) 
相關問題