3

コマンドラインで実行する場合、 python3 a4.py apple があるはずです

数値を合計しようとしているファイルは、このように見えます

4   14
5

これは私がこれまでに集めたものです

import sys
print(sys.argv[1])
fp = open(sys.argv[1])
fileContents = fp.read()
fp.close()
numbers = fileContents
print(numbers)

def map(f,items):
    result = []
    for i in range(0,len(items),1):
        result = result + [f(items[i])]
    return result

a=map(eval,numbers)

def sum(num):
    total = 0
    for i in range(0,len(num),1):
        total = total + i
    return total
print(sum(a))
4

2 に答える 2

4

(「再帰」タグに少し混乱しています)

これはどう?

import sys

with open(sys.argv[1]) as inf:
    total = 0
    for line in inf:
        total += sum(int(i) for i in line.split())

print(total)

  • これは、各行に数値(この場合は整数)のみが含まれていることを前提としています。
  • 数値にfloat値が含まれている場合float()は、int()
  • を使用withすると、完了したとき、または実行が発生したときに、ファイルが自動的に閉じられます。
  • これはファイルを1行ずつ処理するため、巨大なファイルのメモリの問題によって制限されることはありません(可能性がある場合)

アップデート:

以下のJFSebastianによる有益なコメントによって提供されるこれにより、これをさらに短縮することができます。

with open(sys.argv[1]) as inf:
    print(sum(int(number) for line in inf for number in line.split()))
于 2012-07-29T21:00:59.753 に答える
2

あなたの例に基づいて、Levonのソリューションを使用します。ただし、通貨としてフォーマットされた数値がある場合、または埋め込まれた数値を抽出する必要がある場合は、以下がベースとして機能します。

import sys
import mmap

fin = open(sys.argv[1])
mm = mmap.mmap(fin.fileno(), 0, access=mmap.ACCESS_READ)
total = sum(int(m.group()) for m in re.finditer(r'\d+', mm))
于 2012-07-29T21:51:37.097 に答える