无法将字符串转换为浮点数 - 从文件中读取
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
我有一个这样的文本文件
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