使用python删除存档中不可用的字符或数据

时间:2014-05-20 02:20:59

标签: python

我有一个包含无法使用数据的存档,我想用python清理它们。

首先,这些行的形式为:

Xac:0.01660156#,Yac:0.02343750?,Zac:1.00683593*

我想删除:Xac:Yac:Zac:,以及#?,{等数字末尾的字符{1}}只留下数字。

另外,我想删除档案中的一些垃圾行:

*

存档中的那些行对我来说是垃圾,我需要删除它们以留下一个只有三列数字的干净存档。 (实际上,这些数字是!Data Logger Accelerometer] , Initializing... xy轴上的加速度计读数,但我有无法使用的数据,如上所示。)

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

你可以使用python正则表达式。

import re 
x = 'Xac:0.01660156#,Yac:0.02343750?,Zac:1.00683593*'
print re.findall('(\d*\.?\d+)', x)  #['0.01660156', '0.02343750', '1.00683593']

答案 1 :(得分:0)

您需要解析数据文件。

首先,跳过无效行:

if not line.startswith('Xac:'):
    return None

其次,由非数字字符分开:

parts = re.split('[,Xac:YZ#?*]', line)

第三,过滤空strs:

parts = filter(lambda x: bool(x), parts)

第四,隐蔽strfloat

parts = map(lambda x: float(x), parts)

最后,将list转换为tuple

return tuple(parts)

完整的例子是这样的:

import re


def parse_line(line):
    """ line -> (int, int, int), None if invalid
    """
    if not line.startswith('Xac:'):
        return None
    parts = re.split('[,Xac:YZ#?*]', line)
    parts = filter(lambda x: bool(x), parts)
    parts = map(lambda x: float(x), parts)
    return tuple(parts)

output = []
with open('input.txt') as f:
    for line in iter(f.readline, ''):
        axes = parse_line(line.strip())
        if axes:
            output.append(axes)
print output

输入文件input.txt

!Data Logger Accelerometer] ,

Initializing...

Xac:0.01660156#,Yac:0.02343750?,Zac:1.00683593*

输出:

[(0.01660156, 0.0234375, 1.00683593)]