为什么循环不会遍历我的所有读取线?

时间:2017-10-16 10:55:38

标签: python python-3.x

尝试让它运行超过3行文本但我现在甚至没有正常工作。

文本文件是

74,85,65,56
97,67,83,96

以下是我一直致力于

的代码
file = open('grades.txt','r')
for x in file:
    read = file.readline()
    sep = read.split(",")
def toNumbers():
    changeNum = [eval(x) for x in sep]
    return changeNum 
def sumlist():
    total = 0
    sum(pls)
    average = sum(pls)/len(sep)
    print ("Your average is: ", average)
def main():
     sumlist()
pls = toNumbers()
main()

输出应为

Your average is: 70.0
Your average is: 85.75

我得到的只是这个

Your average is: 85.75

当我在文本文件中添加第三行时,我收到此错误

SyntaxError: unexpected EOF while parsing

第三行也只是文本文件中的一行数字,可以从那里继续

74,85,65,56
97,67,83,96
10,20,30,40

输出应为

Your average is: 70.0
Your average is: 85.75
Your average is: 25.0

4 个答案:

答案 0 :(得分:3)

这很简单。

for x in file:

已遍历文件的行,但您忽略了x的值,这是第一行的内容。您只需使用以下内容获取第二行的内容:

 read = file.readline()

添加另一行会导致错误,因为你告诉Python要做的是for each line in the file, read next line,所以for循环将每个奇数行都放入x,然后每个偶数行存储在{{} 1}}。因此,只处理具有偶数行的文件而没有错误 你想拥有这个:

read

编辑:完成示例:

for read in file:
    sep = read.split(",")

答案 1 :(得分:2)

我会删除您的main函数,因为您的示例中并不需要它,并在for循环中调用toNumberssumlist。请注意,您需要将变量作为函数的参数传递:

def toNumbers(sep):
    changeNum = [int(x) for x in sep]
    return changeNum

def sumlist(pls,sep):
    average = sum(pls)/len(sep)
    print ("Your average is: ", average)


file = open('grades.txt','r')

lines = file.readlines()
for line in lines:
    sep = line.split(",")

    pls = toNumbers(sep)
    sumlist(pls,sep)

这给出了:

Your average is:  70.0
Your average is:  85.75

答案 2 :(得分:1)

上面的代码甚至没有在python 3中为我运行。但是将readline更改为readlines如下所示是完美的。

lines = file.readlines()
for line in lines:
    sep = line.split(",")

答案 3 :(得分:1)

问题是因为您在file循环上使用for并且在每一步使用file.readline()。这就是为什么当你有3行显示错误时。尝试添加另一行,4行,它将显示最后一行。

打印readsep会对您有所帮助。 您会注意到使用您的代码,因为sep分配,您只能获得最新的代码。

以下代码可以实现您的目标:

file = open('sample.txt','r')

raw_lines = file.readlines()
lines = [raw_line.strip() for raw_line in raw_lines]


def show_avg_per_line(line):
    line_list = list(map(int, line.split(",")))
    average = sum(line_list) / len(line_list)
    print("Your average is: ", average)

for line in lines:
    show_avg_per_line(line)