2014-12-04 16 views
0

我正在計算給定文件中的所有數字。它的工作原理除非數字之間有一個詞。 e.g:讀取文件中的所有數字並計算它們在python中的總數

1 
2 
car 
3 
4 

這裏是我的代碼:

def main(): 
count=0 
with open("numbers.txt", "r") as f: 
    try: 
     line = f.readline() 
     while line != '': 
      print(line.strip()) 
      count += int(line) 
      line = f.readline() 

    except Exception as err: 
     print(err) 

    print(count) 

main() 

我想繼續下去,但它僅與或工作一段時間。那麼有什麼辦法嗎?

+0

你的文件如何看起來像所有在同一行? – Hackaholic 2014-12-04 20:45:08

+0

你計算的數字是什麼意思?你能告訴一下像'1 2 car 3 4'這樣的線路的結果嗎? – Kasramvd 2014-12-04 20:45:13

回答

1

你應該將你的循環內的tryexcept塊。然後當你用非數字命中一行時,你可以跳過它並繼續下一行。

無關的這個錯誤,你也可以通過直接遍歷文件中for循環,而不是調用readline反覆在while循環簡化您的代碼位:

with open("numbers.txt", "r") as f: 
    for line in f:   # simpler loop 
     print(line.strip()) 
     try:    # move this inside the loop 
      count += int(line) 
     except Exception as err: # you may only want to catch ValueErrors here 
      print(err) 

    print(count) 
1

可以使用isdigit檢查數量:

while line != '': 
     print(line.strip()) 
     if line.strip().isdigit(): 
      count += int(line.strip()) 
     line = f.readline() 

這裏,如果你想總結所有數字達到這個
Python的方式:如果你想怎麼算

f = open('file') 
total_count = sum(int(x) for x in f if x.strip().isdigit()) 

其中很多是數字:

f = open('file') 
total_digit = len(x for x in f if x.strip().isdigit()) 
0

您可以使用isdigit方法來檢查線路只包含數字:

def main(): 
    count=0 
    with open("numbers.txt", "r") as f: 
     count = sum(int(line) for line in f if line.strip().isdigit()) 
     print(count) 

if __name__ == '__main__': 
    main() 
0

您可以嘗試使用正規表達式:

import re 

total = 0 

with open("numbers.txt", "r") as f: 
    line = f.readline() 
    while line != '': 
     total += sum([int(x) for x in re.findall('(\\d+)', line)]) 
     line = f.readline() 
print total 
相關問題