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

Could not convert string to float - Reading from the fil

我有一个这样的文本文件

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()) 我也试过了,但也没有用。 这是一个初学者问题,在此先感谢!!

使用 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 跳过行,因为文件对象 returns 它是自己的迭代器:

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