我有一个我必须阅读的文本文件,如下所示:
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"它会在它到达之前停下来#34; p"因此,如果最后一部分是字符串而不是int或float则无关紧要。在那之后没有工作,我添加了"里程!='低'""希望能解决这个问题,但事实并非如此。如果有人能帮助我找到一种方法让文件一旦到达最后一个" n"所以它没有达到说"低"这真的会帮助我。
答案 0 :(得分:1)
首先,在文本文件的最后一行,您尝试将字符串('low')转换为float。为此,您需要执行if或try语句以确保第二列实际上是浮点数。
try:
miles = float(fields[1])
except ValueError:
# The second column is not a float.
其次,根据您的错误,字符串'low'实际上已被解析为其各自的字母。例如,您的字段列表可能如下所示:
fields = ['p', 'l', 'o', 'w', ...]
我无法确切地知道这一点,但看起来你并没有正确地拆分这条线。也许在那里有一个额外的空间?无论如何,错误清楚地告诉你,你的字段列表的第二个元素是字符串'l',而不是像你期望的那样'低'。做一些调试,看看为什么会这样。
答案 1 :(得分:1)
问题是您正在尝试将字符串“low”转换为float。这是在线上发生的:
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")
正如其他人所提到的,您提供的代码段不会按原样运行,因为有一些未分配的名称。但这应该为您提供所需的功能。
答案 2 :(得分:1)
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')