无法将字符串转换为浮点数 - 从电影中读取

时间:2015-02-16 01:09:21

标签: python text-files

我有一个像这样的文本文件

Coffee 1
18.0
Coffee 2
25.0

我写了一个程序来读取和打印文本文件中的数据,我的代码是这样的:

file_coffee = open('coffee.txt','r')
description = file_coffee.readline()
while description != '':
    qty = file_coffee.readline()
    qty = qty.rstrip('\n')
    qty = float(qty)
    description = description.rstrip('\n')
    print (description)
    print (qty)
    description = file_coffee.readline()
file_coffee.close()

当我运行程序时,我遇到了

Coffee 1
18.0
Coffee 2
25.0
ValueError: could not convert string to float:

虽然下一行绝对是一个可转换的字符串。此外,我不明白为什么程序仍然打印出来然后通知有问题。 我知道当我使用python将数据放到coffee.txt时,我也把'\ n'放在了所有东西之后。所以我尝试首先从qty变量中剥离'\ n'然后使用float但它仍然无效。然而,我的书中的例子刚刚使用过:qty = float(file_coffee.readline())我也试过了,但它也没有用。 这是一个初学者的问题,并提前感谢!!

1 个答案:

答案 0 :(得分:1)

使用try/except,使用with打开文件,然后迭代文件对象f。您不需要while循环来读取文件。到达文件末尾时,迭代将停止:

with open('coffee.txt', 'r') as f: # closes automatically
    for qty in f:
        try:
            qty = float(qty) # try to cast to float
        except ValueError:
            pass
        print(qty) # will either be a float or Coffee 1 etc..

如果浮点数是第二行,我们可以使用next跳过行,因为文件对象返回它自己的迭代器:

with open('coffee.txt', 'r') as f:
    next(f)  # skip very first line
    for qty in f:
        qty = float(qty)
        next(f,"") # skips every other line
        print(qty)

输出:

18.0
25.0

如果文件不是很大,我们可以使用map映射到浮点数并获取每个第二个元素切片readlines

with open('coffee.txt', 'r') as f:
    floats = map(float,f.readlines()[1::2]) # start at second element and get every second element after
    print(list(floats))
[18.0, 25.0]

您无需剥离以进行浮动:

In [5]: float(" 33 ")
Out[5]: 33.0

In [6]: float(" 33 \n")
Out[6]: 33.0