使用lambda

时间:2019-06-16 02:55:32

标签: python lambda

我有一个代码将数据保存到.txt文件中,然后使用下面的代码,该代码在特定列中查找最小值,然后将其保存到另一个文件中并附加其他信息。行。输出看起来像这样,当我遇到相同的错误时,我将介绍两种情况。

我的代码:

    rows = []
    with open("S:/Workflow/Testresults/measurements.txt", mode='r') as infile:
        reader = csv.reader(infile, delimiter=" ")
        for row in reader:  # each row is a list
            rows.append(row)
    minimus = min(rows, key=lambda x: float(x[1]))
    dipolemoment = (float(minimus[3]) * ((2*6.532) * pow(10, 22) / (1.06 * pow(10,-10) * 4.5 * cos(radians(int(minimus[0])))))) * pow(10,-24)

错误:

Traceback (most recent call last):
  File "S:/Workflow/NewestDecomp/Decomposition13062019.py", line 198, in <module>
    minimus = min(rows, key=lambda x: float(x[1]))
  File "S:/Workflow/NewestDecomp/Decomposition13062019.py", line 198, in <lambda>
    minimus = min(rows, key=lambda x: float(x[1]))
ValueError: could not convert string to float:

第一

输出:

30 295.5746708644463
31 287.2952638886134
32 278.71824911973124
33 269.851301784405
34 260.7054651033139
35 251.29568775900006

在这种情况下,脚本可以运行,但是如果我在第一行中输入的数字超过100,则会出现错误。

第二

输出:

30 239.69282467921443 0.4676188470692765 
31 233.26309732696078 0.4676188470692765
32 226.55527422794984 0.4676188470692765
33 219.5700525651719 0.4676188470692765
34 212.31067697178025 0.4676188470692765
35 204.78347831156816 0.4676188470692765
36 196.99928467633828 0.4676188470692765

如果我尝试使用该代码,则会收到此错误。第一列中的数字是否大于100都没关系。

有什么想法吗?

1 个答案:

答案 0 :(得分:-1)

我认为您可能会看到阅读的文本文件格式存在问题。

当我运行代码片段时

rows = []
with open("test.txt", mode='r') as infile:
    reader = csv.reader(infile, delimiter=" ")
    for row in reader:  # each row is a list
        rows.append(row)
    minimus = min(rows, key=lambda x: float(x[1]))

test.txt中有您的第一个示例,但是在第一列中将其修改为具有大于100的整数,我没有重现该错误。同样,当我以第二个示例逐字运行此代码段时,我不会重现您的错误。

看到的错误

ValueError: could not convert string to float:

显示无法转换的字符串为空。如果它是一个非空字符串,例如字符串notafloat,它将显示为

ValueError: could not convert string to float: notafloat

第二列将为空字符串的示例是,如果一行的第一列和第二列之间有多个空格。在这种情况下,您可以在skipinitialspace=True中使用csv.reader作为选项,它将跳过定界符之后的所有其他空格。