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

时间:2015-09-28 18:46:47

标签: python text-files

我有一个我必须阅读的文本文件,如下所示:

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"所以它没有达到说"低"这真的会帮助我。

3 个答案:

答案 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')