Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中逐行求和_Python_Python 2.7_Sum_Python 2.x - Fatal编程技术网

如何在python中逐行求和

如何在python中逐行求和,python,python-2.7,sum,python-2.x,Python,Python 2.7,Sum,Python 2.x,我在这方面是新手,无法搜索我的确切问题。虽然这对你们中的许多人来说可能很简单,但对我来说,这肯定是一个充满愤怒的碗。所以,这里是 我有一个包含列和行的文本文件。列是字符串,行是数字 EXAMPLE: text file. Line 1: a.1 2.g 2.2 b.3 Line 2: -------------------- Line 3: 1 2 4 1 Line 4: 3 3 1 1 Line 5: 2 1 5 8 我需要

我在这方面是新手,无法搜索我的确切问题。虽然这对你们中的许多人来说可能很简单,但对我来说,这肯定是一个充满愤怒的碗。所以,这里是

我有一个包含列和行的文本文件。列是字符串,行是数字

EXAMPLE: text file. 
Line 1: a.1  2.g  2.2  b.3
Line 2: --------------------
Line 3:  1    2    4    1
Line 4:  3    3    1    1
Line 5:  2    1    5    8
我需要阅读文本文件并做一些简单的数学运算。 1.对第3、4、5行求和

最终结果如下所示:

FINAL 
Line 1: 
Line 2:
Line 3:  8
Line 4:  8
Line 5:  16
这是我到目前为止所拥有的

files = open("exam-grades.txt", "r") 
line_number = 1
for line in files:
    if (line_number == 1 or line_number == 2): 
        continue

    else:

        sum = 0 
        numbers = line.split("\t") 
        for n in numbers:
            sum = sum + float(n) 

        print "Line #: %d / Sum is %d ."%(line_number,sum)

    line_number = line_number + 1

line\u number
最初是1,因此它在不增加
line\u number
的情况下命中第一个
if
语句和
continue
s,因此对每一行执行相同的操作,并且不处理其中任何一行

您可以通过如下方式替换循环的顶部来纠正此问题:

for line in files:
    if line_number>=3:
        sum = 0
...
这里的逻辑非常简单,您从
1
开始枚举文件中的行。 检查行号是否为
3
或更大,将一行拆分为一个列表,并验证列表元素是否可以转换为
int
,如果可以的话,我们将其汇总并打印出来。

1)使用
pass
而不是
continue
,如果使用
continue
行号
,则不会更新

2) 要获取数字,请使用
first_part,numbers=line.split(“:”);number=number.split()
。 因为如果你像那样尝试获取数字,它将失败:

>>> sum = 0
>>> line="Line 3:       1       2       4       1"
>>> numbers = line.split("\t")
>>> numbers
['Line 3:', '1', '2', '4', '1'] 
>>> for n in numbers:
...             sum = sum + float(n) 
... 
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
ValueError: could not convert string to float: Line 3:

对我来说,正则表达式似乎有点自然,这取决于数字的复杂性。。。在本例中,我将“data”作为输入数据的通用迭代器:

import re
valid   = re.compile(r'^(?:\s*(\d+\s*))+\s*$')
numbers = re.compile(r'(\d+)')
for line,row in enumerate(data):
    if valid.match(row):
        print "Line #: %d / Sum is %d ."%(line+1,sum(map(int, numbers.findall(row))))
a.1  2.g  2.2  b.3
--------------------
 1    2    4    1
 3    3    1    1
 2    1    5    8
 1    a    Z    12

我会尽量让它更灵活一点,也就是说,我们不会对至少一个值不能转换为float/number的行求和:

def to_number(s):
    try:
        return float(s)
    except ValueError:
        return None

def sum_in_line(s):
    sm = 0
    cols = s.split()
    try:
        return sum(to_number(x) for x in cols)
    except TypeError:
        return ''

with open("exam-grades.txt", "r") as f:
    i = 1

    for line in f:
        print('%4d:\t%s' % (i, sum_in_line(line)))

        i += 1
输入数据:

import re
valid   = re.compile(r'^(?:\s*(\d+\s*))+\s*$')
numbers = re.compile(r'(\d+)')
for line,row in enumerate(data):
    if valid.match(row):
        print "Line #: %d / Sum is %d ."%(line+1,sum(map(int, numbers.findall(row))))
a.1  2.g  2.2  b.3
--------------------
 1    2    4    1
 3    3    1    1
 2    1    5    8
 1    a    Z    12
输出:

   1:
   2:
   3:   8.0
   4:   8.0
   5:   16.0
   6:

到目前为止你写的东西有什么不足?你有没有试着在循环的不同点打印出一些变量?另外,请注意,您正在覆盖python的内置方法sum。最后,请确保在安装后关闭文件指针(文件)done@user5874729检查这个。谢谢!!将“继续”改为“通过”……仍在努力理解整个“编码”过程。。无论如何,非常感谢!不知道为什么这个答案被否决了——它为提出的问题提供了一个实际的解决方案。我很想知道这对解决问题有什么帮助。。。