我有一个代码将数据保存到.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都没关系。
有什么想法吗?
答案 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
作为选项,它将跳过定界符之后的所有其他空格。