如何在到达字符串时停止阅读文本? Python

How to stop reading a text when it gets to a string? Python

我有一个文本文件,我必须从中读取它,如下所示:

n 8.8 45.5
n 6.6 63
n 5.1 88.25
p low 200

这是我的代码:

file_name = input(("Enter name of file: "))
txt = open(file_name, "r")
for line in txt:
    line = line.strip()
    fields = line.split(" ")
    duration = float(fields[2])
    miles = float(fields[1])
    name = fields[0]
    if name == "n" and miles != "low":
        print(running.to_string())
    else:
        print("hello")

每次我 运行 这段代码都会出现以下错误:

miles = float(fields[1])
ValueError: could not convert string to float: 'l'

我最初认为,如果我做了一个 "if" 声明,说只要值读取 "n" 它就会在到达 "p" 之前停止,因此它不会最后一部分是字符串而不是整数或浮点数很重要。在那之后没有用,我添加了 "miles != 'low'" 希望能解决它,但它没有。如果有人能帮我找到一种方法,让文件在到达最后一个 "n" 时停止,这样它就不会到达说 "low" 的部分,这真的会帮助我。

首先,在文本文件的最后一行,您尝试将字符串 ('low') 转换为浮点数。为此,您需要执行 if 或 try 语句以确保第二列实际上是一个浮点数。

try:
    miles = float(fields[1])
except ValueError:
    # The second column is not a float.

其次,根据您的错误,字符串 'low' 实际上已被解析为单个字母。例如,您的字段列表可能如下所示:

fields = ['p', 'l', 'o', 'w', ...]

我不能确定这一点,但看起来你没有正确拆分那条线。也许那里有一个额外的 space ?无论如何,该错误清楚地告诉您字段列表的第二个元素是字符串 'l',而不是您期望的 'low'。做一些调试,看看为什么会这样。

问题是您正在尝试将字符串 "low" 转换为浮点数。这发生在线路上:

miles = float(fields[1])

因此在该点之后添加支票对您没有帮助。试试这个:

file_name = input(("Enter name of file: "))
txt = open(file_name, "r")
for line in txt:
    line = line.strip()
    fields = line.split(" ")
    duration = float(fields[2])
    if fields[1] != 'low':
        miles = float(fields[1])
    name = fields[0]
    if workout_type == "n":
        print(running.to_string())
    else:
        print("hello")

正如其他人所提到的,您提供的代码片段不会 运行 原样,因为有一些未分配的名称。但这应该可以为您提供所需的功能。

file_name = input(('Enter name of file: '))
txt = open(file_name, 'r')
for line in txt:
    fields = line.strip().split(' ')
    duration = float(fields[2])
    miles = float(fields[1]) if not fields[1].isalpha() else fields[1]
    name = fields[0]
    if name == 'n' and miles != 'low':
        print(running.to_string())
    else:
        print('hello')