Python 元组|将字符串转换为浮点数
下面是学习Python的一个很好的教程,但这段代码似乎不起作用Python 元组|将字符串转换为浮点数,python,csv,floating-point,tuples,Python,Csv,Floating Point,Tuples,下面是学习Python的一个很好的教程,但这段代码似乎不起作用 #Open File filename = input("Enter the name of the data file: ") infile = open(filename, 'r') #Read in file datalist = [] for line in infile: #Get data from line date, l, h, rf = (line.split(',')) rainfal
#Open File
filename = input("Enter the name of the data file: ")
infile = open(filename, 'r')
#Read in file
datalist = []
for line in infile:
#Get data from line
date, l, h, rf = (line.split(','))
rainfall = float(rf)
max_temp = float(h)
min_temp = float(l)
m, d, y = (date.split('/'))
month = int(m)
day= int(d)
year=int(y)
#Put data into list
datalist.append([day,month,year,min_temp,max_temp,rainfall])
我正在尝试导入一个csv文件,然后创建一个元组。当我将元组中的值转换为浮点值时,就会出现问题。它可以正常工作,直到它在文件中运行为止。然后它向我展示了这个错误:
回溯最近的调用上次:文件
C:/Users/Devlin/PycharmProjects/untitled3/James's
Programs/Weather.py,第16行,单位:降雨量=floatrf
ValueError:无法将字符串转换为浮点:`
有没有关于我做错了什么的想法?查看您的csv文件
如果不查看文件中的内容很难说,但根据错误消息,最有可能的解释是您有一行的第四个值为空,例如:
2018-01-30,5,12
因此,在解析该行时,rf变量将为空,在尝试将该值转换为浮点值时,您将得到该ValueError
此外,还有一些关于如何做得更好的建议:
您可能希望首先拆分行,然后计算它有多少数据字段,然后在将整行指定为date、l、h、rf之前丢弃它。大概是这样的:
`
`
您可能需要查看用于轻松读取/写入csv文件的。
该错误意味着您试图转换浮点的字符串实际上不是数字。在您的情况下,它看起来像是一个空字符串。这可能是因为文件的最后一行是空的,所以您可以在循环开始时检查它,如果是空的,则中断或继续。另一种策略是捕获错误,但当您希望收到错误通知时,它会忽略格式错误的线路,因此由您选择适合您的线路 使用方括号也会将值放入列表中,而不是元组中。你需要括号 完成后还应关闭文件 Python还有一个很有用的工具
#Open File
filename = input("Enter the name of the data file: ")
infile = open(filename, 'r')
#Read in file
datalist = []
for line in infile:
if line.strip() == '': # If the line only contains spaces
continue # Then, just skip it
# Some stuff ...
# Put everything in a tuple that we add to our list
datalist.append((day,month,year,min_temp,max_temp,rainfall))
infile.close() # Close the file
如果看不到输入文件本身,很难判断您到底做错了什么,但除了文件中的值似乎是逗号分隔的,而且您最好使用Python stdlib的模块,因为在迭代行时,您在某处遇到了字符串,并试图将其转换为浮动,这是一个不可能的过程:
>>> float('spam')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: 'spam'
希望这足以让你回到正轨-
>>> float('spam')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: 'spam'
import csv
data = []
filename = input('Enter the name of the data file: ')
with open(filename) as f:
reader = csv.reader(f, delimiter=',', skipinitialspace=True)
for line in reader:
try:
date, (l, h, rf) = line[0], map(float, line[1:])
m, d, y = map(int, date.split('/'))
except ValueError as e:
print('Skipping line: %s [because of: %s]' % (line, e))
continue
data.append([d, m, y, l, h, rf])