猿问

Python:如何从文本中返回特定行

我是新来的,也是编程新手。我正在阅读 Jamie Chan 的《一日学习 Python》,目前处于实践项目部分。我试图让 python 从 txt 文件中读取一行。txt 文件包含一个名称和一个数字,以逗号分隔,这是文本文件


Benny, 102

Ann, 100

Carol, 214

Darren, 129

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


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”


对于这篇冗长的帖子我感到非常抱歉。


小怪兽爱吃肉
浏览 151回答 4
4回答

慕村9548890

您可以使用 :def getUserPoint(userName):  f = open('userScores.txt', 'r')  for line in f.readlines():    result = line.splitlines()    if userName in line:        f.close()        return result    f.close()  return "nill"  s = getUserPoint(input('Ann'))print(s)

繁花如伊

一个问题是您有一个匹配的 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

收到一只叮咚

见下文该代码负责关闭文件。如果没有找到匹配则返回None,否则返回“用户点”def get_user_point(user_name):    with open('userScores.txt', 'r') as f:      lines = [l.strip() for l in f]      for line in lines:        parts = line.split(',')        if user_name == parts[0]:          return parts[1]

MYYA

def getUserPoint(userName):    with open('userScores.txt') as f:        for line in f:            if userName == line.split(',')[0]:                return line    return "nill"由于我是 Python 和一般编程的新手,我可能会问更多问题。感谢大家的帮助。
随时随地看视频慕课网APP

相关分类

Python
我要回答