如何在到达字符串时停止阅读文本? 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')
我有一个文本文件,我必须从中读取它,如下所示:
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')