我需要在文件中创建所有其他数字的总和,如下所示:
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")
答案 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)