检查 csv 文件 python3 中的非浮点数

Posted

技术标签:

【中文标题】检查 csv 文件 python3 中的非浮点数【英文标题】:Check for non-floats in a csv file python3 【发布时间】:2019-04-09 20:07:30 【问题描述】:

我正在尝试读取一个 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

这可能有点混乱,因为它本质上是我尝试过的不同可能解决方案的拼凑。

它获取的值是文件的名称(名称)和它从文件中读取的值的数量(数量)。

有没有人知道为什么这不能像我预期的那样工作?

【问题讨论】:

【参考方案1】:

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 模块的经验,我得去看看。当你说包裹在你的异常块中时,你是什么意思? 我的意思是:就像你以前那样。我添加了一个使用 csv 的代码 sn-p

以上是关于检查 csv 文件 python3 中的非浮点数的主要内容,如果未能解决你的问题,请参考以下文章

如何正确地将作为 CSV 文件中字符串的浮点数/双精度数作为浮点数/双精度数导入程序?

展平 3D NumPy 数组中的内部元组并作为浮点数保存到 CSV

将浮点数乘以 Python 中的函数并且无法将序列乘以“浮点”类型的非整数

将 csv 文件作为浮点数读取到 pandas 数据帧

Python pandas 带有 to_csv 的大浮点数

在导入的 .csv 中将字符串更改为浮点数