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()而不是int()
  • with当您完成或遇到异常时,using会自动为您关闭文件。
  • 这会逐行处理文件,因此它不会受到大文件的内存问题的限制(如果有可能的话)

更新:

您可以使用下面 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 回答