在python中提取数据时处理错误的值

时间:2017-09-27 01:16:09

标签: python

我有以下辅助函数来计算多个读数列表中的总步数

例如[' 40',' 1571',' 1366',' 691',' 947', ' 1947',' 108',' 132',' 950',' 1884']

def data_check(readings, total):

for reading in readings:

    steps = int(reading)
    total = total + steps

return total

我需要改变程序,以便它可以处理坏数据,例如字符串或负值,并在发生错误值时将总数加零。

例如[' 40',' 1571',' 13vgs6',' -5',' 947' ]

我的解决方案如下,如果没有正常工作,那么在程序中稍后会出现零错误除法:

def data_check(readings, total):
""" checks to see if data is good format and returns total """
print(readings)

for reading in readings:


    if type(reading) == int:

        steps = int(reading)

    else:

        steps = 0


    total = total + steps


return total

也许我正在使用一种不好的方法,并且shoudl可能有一个帮助函数,用手前的零替换列表中的所有错误值?

4 个答案:

答案 0 :(得分:1)

type

对象的type有点像它的类;你无法检查字符串是否像这样表示整数。

tryexcept

你可以这样做:

try:
    value = int(reading)
except: # parsing to integer failed
    value = 0

re正则表达式

您还可以import re并检查re.match(r"\d+$", reading)的真实性,以确定它是否代表整数。以下正则表达式起作用:

Type             | Regex
Positive Integer | \d+$
Integer          | -?\d+$
Positive Real    | (\d+|\d*\.\d+)$
Real             | -?(\d+|\d*\.\d+)$

制作你的代码:

if re.match(r"\d+", reading): # or whichever regex you choose
    value = int(reading) # or float(reading)
else:
    value = 0

str函数

字符串具有确定它们是否全部为数字的功能。 str.isdigit(string)适用于正整数,因此您可以执行此操作:

if reading.isdigit():
    value = int(reading)
else:
    value = 0

也许更热情的是value = int(reading) if reading.isdigit() else 0value = reading.isdigit() and int(reading);第二个更短但可读性更低。

答案 1 :(得分:0)

answer开始,您可以查找该字符“ord(char)”的ascii索引,如果它在“48-57”(数字范围)范围内,则追回“chr”(索引)“

答案 2 :(得分:0)

对于整数值的总数,您可以尝试:

import re
s = ['40', '1571', '13vgs6', '-5', '947']
integers = len([i for i in s if re.findall("^-*\d+$", i)])
print(integers)

输出:

4

答案 3 :(得分:-1)

您可以使用&#34; isinstance()&#34;内置功能。<​​/ p>

def numberofints(listofvalues):
   integers = 0
   for i in listofvalues:
      if isinstance(i, int): integers += 1
   return integers