首页 > 解决方案 > Python:如何从文本中返回特定行

问题描述

我是新来的,对编程也很陌生。我正在阅读 Jamie Chan 的《Learn Python in One Day》,目前在 Practical Project 部分。我试图让 python 从 txt 文件中读取一行。txt文件包含一个名称和一个用逗号分隔的数字,这是文本文件

Benny, 102
Ann, 100
Carol, 214
Darren, 129

我成功地使它读取了第一行,但是尝试通过调用那里的名称来打印第二行却一直返回零。当我切换行时,会发生同样的事情,它读取第一行中的名称,但在第二个文件中的名称上返回 nill。这是我试图用来阅读文本的功能:

def getUserPoint(userName):
    f = open('userScores.txt', 'r')
    for line in f:
        result = line.splitlines()
        if userName in line:
            return result
        else:
            return "nill"
    f.close()


s = getUserPoint(input('Ann'))
print(s)

这是结果:

nill

这是说明:每一行记录一个用户的信息。第一个值是用户的用户名,第二个是用户的分数。接下来,该函数使用 for 循环逐行读取文件。然后使用 split() 函数拆分每一行让我们将 split() 函数的结果存储在列表内容中。接下来,该函数检查是否有任何行与作为参数传入的值具有相同的用户名。如果有,该函数将关闭文件并在该用户名旁边返回分数。如果没有,函数关闭文件并返回字符串'-1'</p>

非常抱歉这篇冗长的帖子。

标签: python

解决方案


一个问题是您有一个匹配的 else 语句,它将立即结束函数和循环

查看所有行后,您需要返回默认结果

def getUserPoint(userName):
    with open('userScores.txt') as f:
        for line in f:
            if userName == line.rstrip().split(',')[0]:
                return line
    return "nill"

然后,如图所示,您要么想要拆分逗号并检查第一列,要么userName in line. 否则,您正在检查

'Ann' in ["Ann, 100", ""]

因为splitlines()将在最后的换行符处拆分,返回 False


推荐阅读