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