如何对文件中的其他所有数字求和?

时间:2019-03-31 18:37:06

标签: python file math

我需要在文件中创建所有其他数字的总和,如下所示:

10
20
30
40

它只会将20和40加在一起得出60。

try:
    infile = open("numbers.txt", "r")

    for lines in infile:
        print(sum(infile))
        infile.readline()[::2]

    infile.close()

except ValueError:
    print("Couldn't Open File")
except IOError:
    print("File not found")

2 个答案:

答案 0 :(得分:1)

尝试此代码。

try:
    with open("numbers.txt", "r") as infile:
        print(sum([int(line) for line in infile][1::2]))
except ValueError:
    print("Couldn't Open File")
except IOError:
    print("File not found")

首先,它使用with构造来安全地处理文件的打开和关闭。其次,它使用列表推导来列出文件中各项的列表。第三,它使用int()将行从文本转换为整数。第四,它使用切片[1::2]来使用每隔一行,从第二行开始(索引为1)。第五,它使用sum来添加这些数字。

清楚吗?如果您不喜欢列表理解,可以通过常规循环来完成。我的方法的主要缺点是,在仅使用其中一半项目之前,它会形成所有项目的列表。这是通过使用生成器删除该列表的代码,因此它使用的内存更少,但代价是更加复杂。

try:
    with open("numbers.txt", "r") as infile:
        print(sum(int(line) for ndx, line in enumerate(infile) if ndx % 2))
except ValueError:
    print("Couldn't Open File")
except IOError:
    print("File not found")

答案 1 :(得分:0)

如果文件不大,则可以逐行跳过阅读:

with open('thefile.dat') as fd:
    print(sum(int(line) for line in fd.readlines()[1::2]))

效率不高,但更干净,适合大多数用例。我省略了放置适当的异常处理,因此也要使用它,但是请注意with确实可以自动关闭文件。

您的代码很接近,但是您混淆了要累加的内容:

s = 0
try:
    for line in infile:
        next(line) #skip odds
        s+=int(line)
except StopIteration: pass #odd number of lines, will be thrown by "next".
print(s)