解析时意外的 EOF;尝试计算读入的每一行的 mean/max/min

Unexpected EOF while parsing; trying calculate mean/max/min of each line reading in

数据如下所示:

line = infile.readlines()
line

['56047257 16 17 19 16 12 15 12 20 58 123 59\n',
 '97231934 18 16 13 19 16 12 13 18 72 101 55\n',
 ....same]

我想使用下面的循环获取 2 到 9 列的平均值并获取 2 到 12 列的最大值和最小值,但它一直给我一个错误:

 File "<string>", line unknown

    ^
 SyntaxError: unexpected EOF while parsing

这是我的代码的样子:

def main():
    #read data in
    infile = open('data.txt', 'r')
    sun = 0.0
    count = 0
    line = infile.readline()
    while line != "":

        ID = line.split(" ")
        min_val = float('inf')
        max_val = -float('inf')
        count_min = 0
        count_max = 0
        for xStr in line.split(' ')[1:9]:
            sun = sun + eval(xStr)
            count = count + 1
            avg = round(sun / count, 2)
            val = eval(xStr)
            if val < min_val:
                min_val = val
                count_min = 1
                elif val == min_val:
                count_min += 1

            if val > max_val:
                max_val = val
                count_max = 1
            elif val == max_val:
                count_max += 1
    line = infile.readline()

    print (ID, ' ',avg,' ',min_val,' ',max_val)

main()

请注意您 post 的评论部分中提出的问题,但话虽如此,这是获得所需输出的更简单方法:

def main():
    #read data in
    infile = open('data.txt', 'r')
    average = max_val = min_val = 0.0
    count1=count2 = 0
    line = infile.readlines()
    for x in [x.strip().split() for x in line[:9]]:
        x = ID =map(int, x) 
        average = (average + (sum(x)/len(x)))/len(x)
        print average
    for x in [x.strip().split() for x in line[:12]]:
        x = map(int, x)
        val=max(x)
        if count1 !=0 and val>max_val:
            max_val = val
        val=min(x)
        if count2 !=0 and val<min_val:
            min_val = val
        if count1==0:
            max_val=max(x)
            min_val=min(x)
            count1=count2=1      

    print (ID, ' ',average,' ',min_val,' ',max_val)

main()

注意:您应该尽量不要将 infinty 分配给变量。通常总是有更好的选择