2016-01-24 63 views
-1

我想了解如何計算每行整數數量。我有以下至今:計算每行整數數量

import sys 

filename = raw_input("Enter Filename: ") 

names_list = [] 
with open(filename, 'r') as file: 
    for line in file: 
     line = line.strip() 
     if line: 
     if not line.startswith("#"):  
      names_list.append(line)  

with open(filename, 'r') as file: 
    for line in file.readlines(): 
     words = len(line.split(' ')) 
     print words 

輸出是:

Enter Filename: somenumbers.txt 
6 
9 
4 
1 
5 
5 
5 
5 
1 
5 
1 
1 
5 
20 

輸出繼電器應該是:

Enter Filename: somenumbers.txt 
9 
4 
5 
5 
5 
1 
20 

的我在做什麼不正確計算每個整數的個數有什麼建議線?謝謝。

編輯: 隨着更改strip(),輸出不正確。看起來,從6的輸出開始,每秒的整數不是假設打印的。這些附加值(a 6,1,5,5,5)來自哪裏?我怎樣才能避免這些額外的不正確的值? (到目前爲止謝謝大家)

+1

爲什麼你打開該文件,將其處理成'names_list',然後立即打開該文件以再次處理,而不使用'names_list'?由於實際的和預期的輸出甚至沒有相同的線數,除了'strip'而不是'split'這裏還有其他一些問題。 – TigerhawkT3

+0

@ TigerhawkT3確實......會改變這一點。謝謝,我今天剛開始自學Python。 –

+0

在發佈問題之前,請做出更大的研究努力。 – TigerhawkT3

回答

1

更新
通過文件的內容你循環兩次

with open(filename, 'r') as file: 
    #... 

with open(filename, 'r') as file: 
    #... 

第一次添加所有的「有效「行到一個數組,即names_list(爲什麼這個我dentifier?)。第二次,您只需打印每行中的字數,無論其有效性如何。您只需循環一次

with open(filename, 'r') as file: 
    for line in file: 
     if line.strip() and not line.startswith("#"): 
      names_list.append(line) 
      print "There are ", len(line.split()), " numbers on this line" 

你需要的是split

參見this answer

假設該行只包含每個非#行上的整數,只是將其拆分並計算「單詞」的數量。

#after checking the line is valid 
print "This line contains", len(line.split()), "numbers" 
+0

只是糾正了這一點。是的,這個假設是正確的。謝謝。我的輸出仍然不正確。先生,請看我的更新。 –

+0

看到我編輯的答案 – Arc676

+0

很好。謝謝。我還有一個問題。使用您的更新,我打印出沒有任何值的行,因爲文件中有三個空行。我怎樣才能打印出空行的整數?我認爲是這樣的:'如果不是line.startswith(「\ n」)''。有什麼建議嗎? –

0

我想你的意思是.split()而不是.strip()。替換:

words = len(line.strip(' ')) 

有:

words = len(line.split()) 
+0

只是糾正了這一點。謝謝。我的輸出仍然不正確。先生,請看我的更新。 –

1

使用words = len(line.split(' '))而不是words = len(line.strip(' '))

更新:

相反的文件,使用第二開口: for name in names_list:

UPDATE2:

可以進一步簡化這個:

with open(filename, 'r') as file: 
    for line in file: 
     print(len(line.strip().split())) 
+0

只是糾正了這一點。謝謝。我的輸出仍然不正確。先生,請看我的更新。 –