所以我的代码应该处理行并查看行是否是坐标
"x y z"
示例坐标:
1.500 -6.002 0.007
用数字代表符号,如果是,我将处理所述行,但如果没有,我会保持不变。我认为这将是一个合适的工具,但我对基于过去已经发生的不同场景的技术诀窍太新了。
答案 0 :(得分:2)
正则表达式不是查看数字是否为浮点数的最佳选择。它是复杂的,给定所有可能的形式,有效的浮点数可以采用并可能采用未来的Python版本。
因此,尝试转换它并查看Python是否可以执行此操作会更好,如果它无法捕获异常。
我会像下面这样做:
def check_line(line_coord):
try:
return len([float(x) for x in line_coord.split()])==3
except ValueError:
return False
True
ValueError
例外保护,如果发现异常,则返回False
测试:
print(check_line("10 4.5dd 5.6")) # bogus float in 2nd position
print(check_line("10 5.6")) # only 2 fields
print(check_line("10 -40 5.6")) # 3 fields, all floats
False
False
True
编辑:如果值在这里,则仅检查。 Dawg提出了一种方法来返回三元组或None
如果错误,就像这样:
def check_line(line_coord):
try:
x,y,z = map(float,line_coord.split())
return x,y,z
except ValueError:
return None
(map
更快,因为它不会创建临时列表)。我们得到的测试与之前相同:
None
None
(10.0, -40.0, 5.6)