检查 csv 文件中的非浮点数 python3
Check for non-floats in a csv file python3
我正在尝试读取一个 csv 文件,并根据存储在其中的值创建一个二维列表。
然而,当我尝试检查存储的值是否可以转换为浮点数时,我 运行 遇到了麻烦。
这是我编写的函数,它读取文件并创建一个列表。
def readfile(amount, name):
tempfile = open(name).readlines()[1:] #First value in line is never a float, hence the [1:]
rain_list = []
count = 0.0
for line in tempfile:
line = line.rstrip()
part = line.split(",")
try:
part = float(part)
except ValueError:
print("ERROR: invalid float in line: {}".format(line))
rain_list.append(part[amount])
count += 1
if count == 0:
print("ERROR in reading the file.")
tempfile.close()
return rain_list
它可能有点乱,因为它本质上是我尝试过的不同可能解决方案的拼凑而成。
它获取的值是文件的名称(name)和它从文件中读取的值的数量(amount)。
有没有人知道为什么这不能像我期望的那样工作?
part
是一个字符串列表。要检查并转换所有浮点数,您必须执行以下操作:
part = [float(x) for x in part]
(包含在您的异常块中)
顺便说一句,您应该使用 csv
模块来读取逗号分隔的文件。它是内置的。同样使用 enumerate
将允许能够打印发生错误的行,而不仅仅是数据:
reader = csv.reader(tempfile) # better: pass directly the file handle
# and use next(reader) to discard the title line
for lineno,line in enumerate(reader,2): # lineno starts at 2 because of title line
try:
line = [float(x) for x in line]
except ValueError:
print("ERROR: invalid float in line {}: {}".format(lineno,line))
我正在尝试读取一个 csv 文件,并根据存储在其中的值创建一个二维列表。
然而,当我尝试检查存储的值是否可以转换为浮点数时,我 运行 遇到了麻烦。
这是我编写的函数,它读取文件并创建一个列表。
def readfile(amount, name):
tempfile = open(name).readlines()[1:] #First value in line is never a float, hence the [1:]
rain_list = []
count = 0.0
for line in tempfile:
line = line.rstrip()
part = line.split(",")
try:
part = float(part)
except ValueError:
print("ERROR: invalid float in line: {}".format(line))
rain_list.append(part[amount])
count += 1
if count == 0:
print("ERROR in reading the file.")
tempfile.close()
return rain_list
它可能有点乱,因为它本质上是我尝试过的不同可能解决方案的拼凑而成。
它获取的值是文件的名称(name)和它从文件中读取的值的数量(amount)。
有没有人知道为什么这不能像我期望的那样工作?
part
是一个字符串列表。要检查并转换所有浮点数,您必须执行以下操作:
part = [float(x) for x in part]
(包含在您的异常块中)
顺便说一句,您应该使用 csv
模块来读取逗号分隔的文件。它是内置的。同样使用 enumerate
将允许能够打印发生错误的行,而不仅仅是数据:
reader = csv.reader(tempfile) # better: pass directly the file handle
# and use next(reader) to discard the title line
for lineno,line in enumerate(reader,2): # lineno starts at 2 because of title line
try:
line = [float(x) for x in line]
except ValueError:
print("ERROR: invalid float in line {}: {}".format(lineno,line))