2016-11-07 57 views
1

所以我的代码应该处理线,看是否有线路坐标如何检查是否字符串在Python中

"x y z" 

例如坐标特定的格式:

1.500 -6.002 0.007 

用数字表示符号,如果是的话,我会处理这条线,但如果没有,我会保持它不变。我认为这将是正确的工具,但基于过去已经发生的不同情况,我对新技术太陌生了。

+0

我可以添加一个浮动检查,如果符号inbetween坐标浮动是“”而不是“;”? (我有点儿睡不着,对不起) – Grak

回答

2

正则表达式不是查看数字是否为浮点数的最佳选择。考虑到有效的浮点数可以采用的所有可能的形式,并且可能在未来的Python版本中使用,这很复杂。

因此,它更好地尝试来转换它,看看如果Python可以做到这一点,捕捉异常,如果它不能。

我会这样象下面这样:

def check_line(line_coord): 
    try: 
     return len([float(x) for x in line_coord.split()])==3 
    except ValueError: 
     return False 
  • 创建就行分裂浮充转换列表理解根据空间
  • 检查,如果该列表的长度等于3:返回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 

编辑:这仅上述检查如果值在这里。耶提出了一个方法,返回三重或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) 
+0

你可以做'try:x,y,z = map(float,line.split());返回x,y,z; ValueError除外:return None' – dawg

相关问题