将DCS脚本解析为python

时间:2018-02-01 20:18:20

标签: parsing text

我是python的新手,我正在尝试使用它(Python 2.7.14)从文本文件中提取信息。

当我将部分文本文件复制为字符串并运行搜索时,如下所示:

import re

data = """ATTRIBUTE_INSTANCE NAME="R_MIX_HIHI_LIM"
    {
      VALUE { CV=0 }
    }
    ATTRIBUTE_INSTANCE NAME="R_MIX_LOLO_LIM"
    {
      VALUE { CV=0 }
    }
    ATTRIBUTE_INSTANCE NAME="R_MIX_SP"
    {
      VALUE { CV=0 }
    }
    ATTRIBUTE_INSTANCE NAME="R_VAC_HIHI_LIM"
    {
      VALUE { CV=0 }
    }
    ATTRIBUTE_INSTANCE NAME="R_VAC_LOLO_LIM"
    {
      VALUE { CV=0 }
    }
    ATTRIBUTE_INSTANCE NAME="R_VAC_SP"
    {
      VALUE { CV=0 }
    }
    ATTRIBUTE_INSTANCE NAME="L_RECIRC_TM"
    {
      VALUE { CV="" }
    }
    ATTRIBUTE_INSTANCE NAME="L_RECIRC_TM_SP"
    {
      VALUE { CV="" }
    }"""

regex = re.compile(r"ATTRIBUTE_INSTANCE NAME\=\"([A-Za-z][_A-Za-z]+)")
result = regex.search(data)

for result in regex.findall(data):
    print result

我得到了我想要的输出。当我尝试使用以下内容直接搜索文本文件时出现问题:

import re

f_open = open("file.txt", "r")
data = f_open.read()

regex = re.compile(r"ATTRIBUTE_INSTANCE NAME\=\"([A-Za-z][_A-Za-z]+)")
result = regex.search(data)

for result in regex.findall(data):
    print result

f_open.close()

我的搜索命令不再输出任何内容。这是由于"开放"命令在所有字符之间添加空格。所以而不是:

ATTRIBUTE_INSTANCE NAME="R_PRS_CTRL_LM"
{
  VALUE { CV=0 }
}

我得到了:

     A T T R I B U T E _ I N S T A N C E   N A M E = " R _ P R S _ C T R L _ L M "
     {
         V A L U E   {   C V = 0   }
     }

有没有确保我的代码在不添加空格的情况下读取文本文件,从而破坏了我的搜索功能?

1 个答案:

答案 0 :(得分:0)

我明白了。 DCS输出文件是二进制的。转换文件可以解决问题。