2016-06-22 8 views
0

大きなファイル内の文章から番号を抽出しています。例文(ファイルfinalsum.txt中):リスト内のすべての和

the cat in the 42 hat and the cow 1772 jumps over the moon. 

私はその後、私はすべての数字の最後の合計を作成するファイル全体のために一緒に+ 42 1772を追加したいリストを作成するために、正規表現を使用しています。ここで

は私の現在のコードです:

import re 
import string 
fname = raw_input('Enter file name: ') 

try: 
    if len(fname) < 1: fname = "finalsum.txt" 
    handle = open(fname, 'r') 
except: 
    print 'Cannot open file:', fname 

counts = dict() 
numlist = list() 
for line in handle: 
    line = line.rstrip() 
    x = re.findall('([0-9]+)', line) 
    if len(x) > 0: 
     result = map(int, x) 
     numlist.append(result) 
     print numlist 

私はこのコードが行の理解を使用して2つの行に書き込むことができます知っているが、私はちょうど学んでいます。ありがとうございました!この

+1

あなたの質問は何ですか? – Shubham

+1

'sum(numlist)'は機能しませんか? – Psidom

+0

ファイルは、各行を繰り返し処理するのではなく、メモリに読み込むために十分な大きさですか? – wwii

答えて

0

あなたは、リストを追加する代わりに+演算子を使用してリストに参加するべきではありません。

for line in handle: 
    line = line.rstrip() 
    x = re.findall('([0-9]+)', line) 
    if len(x) > 0: 
     result = map(int, x) 
     numlist+=result 
     #numlist.append(result) 
     print numlist 

print sum(numlist) 

イラスト:あなたが見ることができるように

>>> a = [1,2] 
>>> b = [2,3] 
>>> c = [4,5] 
>>> a.append(b) 
>>> a 
[1, 2, [2, 3]] 
>>> print b + c 
[2, 3, 4, 5] 

append()+は二つのリストに参加するよう最後にリストオブジェクトを追加します。

0

チェック:

import re 

line = 'the cat in the 42 hat and the cow 1772 jumps over the moon 11 11 11' 
y = re.findall('([0-9]+)', line) 
print sum([int(z) for z in y]) 

これは、ネストされたリストを作成しませんが、むしろそれは整数に変換した後に与えられたリスト内のすべての値を追加します。最終的な合計を格納する一時変数を管理し、現在の行のすべての整数の合計をこの一時変数に追加し続けることができます。このよう

answer = 0 
for line in handle: 
    line = line.rstrip() 
    x = re.findall('([0-9]+)', line) 
    if len(x) > 0: 
     answer += sum([int(z) for z in x]) 
print answer 
関連する問題