用Python删除存档中无用的字符或数据

2024-06-09 06:22:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含不可用数据的存档,我想用python清理它们。你知道吗

首先,行的形式是:

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

我想删除:Xac:Yac:,和Zac:,以及数字末尾的字符,如#?*,只留下数字。你知道吗

此外,我还想删除存档中的一些垃圾行,如:

!Data Logger Accelerometer] , 

Initializing...

像归档文件中的那些行对我来说是垃圾,我需要删除它们以留下一个三列上只有数字的干净归档文件。(实际上,这些数字是xyz轴上的加速度计读数,但我有上面显示的不可用数据)。你知道吗

我怎样才能做到这一点?你知道吗


Tags: 数据data数字logger字符形式垃圾读数
2条回答

可以使用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']

您需要解析数据文件。你知道吗

首先,跳过无效行:

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

其次,按非数字字符拆分:

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

第三,过滤空str:

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

第四,将str转换为float

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)]

相关问题 更多 >