PYTHON(2.7):列表推导-在.txt文件中添加(求和)带有附加文本的数字



我正试图使这段代码以某种方式运行。我试图使它,所以有一个文本文件,我有文字和数字在。代码需要提取正数或负数,然后将它们相加。下面,我有一个例子,它看起来像在文本文件减去项目符号。我试图使它最短的代码量(因为任何代码应该写)使用列表理解。我仍然是一个新手编码,所以任何帮助是感激的。


example of text and numbers in file
 - Positive 36
 - Negative: -12
 - Negative: -11
 - Positive: 42
 - Positive: 95
 - Negative: -4

这是一个粗略的代码尝试。我有最大的麻烦(理论上)试图实现是否我想抓住正数或负数:

    sum([int(line.strip()) for line in open("text.txt").readlines()])

您可以从数字中确定数字的符号,因此拆分每行并获取最后一部分:

with open('text.txt') as handle:
    numbers = (int(line.split()[1]) for line in handle)
total = sum(n for n in numbers if n > 0)

不需要在文件对象上调用readlines,因为在文件对象本身上迭代一次会给您所有的行。此外,使用生成器表达式使用的字符更少,对于较大的文本文件运行速度更快,因为没有中间列表。

对空格进行分割,并获得第二个元素,该元素为整数:

with open("text.txt") as f: # using with closes your files automaticlly
    print sum([int(line.split()[1]) for line in f.readlines()])
146

你也可以不使用readlines:

直接遍历文件对象
with open("out.txt") as f:
   print sum([int(line.split()[1]) for line in f])

如果您使用print ([line.split() for line in f]),输出看起来像:

 [['Positive', '36'], ['Negative:', '-12'], ['Negative:', '-11'], ['Positive:', '42'], ['Positive:', '95'], ['Negative:', '-4']]

所以你可以看到line.split()[1]是如何得到整数的

最新更新