使用Python进行复杂的ASCII文件解析

时间:2014-11-07 08:29:17

标签: python parsing ascii

我很难解析看起来如下的ASCII。 我需要在注释行中创建一个名为第一个字母项的数组(以' - '开头),并在该注释行和内联'/'之间追加所有数字。 文件中可能有几个这样的记录。

-- LIQ units - sm³/day  ( 8 values )
  500.0  1000.0  1500.0  2000.0  3000.0 
 4000.0  5000.0  6000.0  /

-- GRAT units - sm³/day  ( 7 values )
    0.0 200000.0 400000.0 600000.0 800000.0 
999999.9 1200000.0 /

例如,我希望获得liq = [500.0, 1000.0, 1500.0, 2000.0, 3000.0, 4000.0, 5000.0, 6000.0]

1 个答案:

答案 0 :(得分:1)

通常情况下,您需要动态创建变量(名称)。而是使用字典来存储所有数组。

您可以逐行解析这些行,并检查该行是否以“ - ”开头 一旦找到这样的一行,你需要解析其余的行,直到你在行的末尾得到一个'\'。

并再次重复该过程直到文件结束

类似于此的东西将起作用

import re
pat = re.compile(r'^--\s*(?P<name>\w+).*')

def get_data(file):
    '''gets the numbers till you find "/"
    '''
    arr = []
    for line in file:
        numbers = line.split()
        if numbers[-1] == '/':
            arr.extend(numbers[:-1])
            break
        else:
            arr.extend(numbers)
    return arr

for line in file:
    if line.startswith('--'):
        name = pat.match(line).groups()[0]
        arrays[name] = get_data(file)

这将返回格式字典:

'GRAT': ['0.0',
  '200000.0',
  '400000.0',
  '600000.0',
  '800000.0',
  '999999.9',
  '1200000.0'],
 'LIQ': ['500.0',
  '1000.0',
  '1500.0',
  '2000.0',
  '3000.0',
  '4000.0',
  '5000.0',
  '6000.0']}

您输入的内容

请在使用代码之前处理边缘情况和异常处理

祝你好运!