从我的字符串中删除正确的浮点值

时间:2017-11-10 20:25:40

标签: python text python-textprocessing

我正在使用python处理pcap文件并将处理后的值输入到文本文件中。文本文件有大约8000行,有时,文本文件有7.70.582之类的字符串。在我对文本文件的进一步处理中,我将文件拆分为行并提取每行中的每个浮点值。然后我收到此错误

ValueError: invalid literal for float(): 7.70.582

在这种情况下,我只对7.70感兴趣,我需要避免包括它在内的第二个小数后的所有内容。是否有任何技巧只能提取字符串,直到第一个小数点后的第一个字符?

我正在寻找这个问题的答案,似乎以前没有问过这样的情况。

或者是否有一种方法可以跳过发生此类错误的那些行?

3 个答案:

答案 0 :(得分:0)

您可以使用str.split()'.'.join

s = "7654 16.317 8.651 7.70.582 17.487"
final_data = map(float, ['.'.join(i.split('.')[:-1]) if len(i.split('.')) > 2 else i for i in s.split()])

输出:

[7654.0, 16.317, 8.651, 7.7, 17.487]

关于单个字符串:

s = ["7.70.582"]
final_data = map(float, ['.'.join(i.split('.')[:-1]) if len(i.split('.')) > 2 else i for i in s])

输出:

[7.7]

答案 1 :(得分:0)

我不是这种方法的忠实粉丝,但最简单的可能是:

strs = [
    "7",
    "7.70",
    "7.70.582",
    "7.70.582.123"
]

def parse(s):
    s += ".."
    return float(s[:s.index(".", s.index(".")+1)])

for s in strs:
    print(s, parse(s))

一种更清晰的方法可能是使用类似的东西:

def parse(s):
    if s.count('.') <= 1: return float(s)
    return float(s[:s.index(".", s.index(".")+1)])

或者,根据Ajax1234的回答:

def parse(s):
    return float('.'.join(s.split('.')[:2]))

所有版本输出:

7               7.0
7.70            7.7
7.70.582        7.7
7.70.582.123    7.7

答案 2 :(得分:0)

您可以使用正则表达式,如下所示:

https://pythex.org/?regex=%5E(%5B0-9%5D%2B%5C.%5B0-9%5D%2B).*&test_string=7.70.582&ignorecase=0&multiline=0&dotall=0&verbose=0

如果您的行符合“7.70.582&#39;这个正则表达式将7.70引入第一组:

^([0-9] +。[0-9] +)。*

https://docs.python.org/2/library/re.html

float(m.group(1))
  
    

&#39; 7.70&#39;

  
where("score::int >= ?", 80)         # PostgreSQL-specific casting syntax
where("cast(score as int) >= ?", 80) # Standard SQL type cast
  
    

7.70