首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python --如何只编写case语句,实例从$ from输入文本文件开始?

Python --如何只编写case语句,实例从$ from输入文本文件开始?
EN

Stack Overflow用户
提问于 2013-08-18 02:34:23
回答 2查看 166关注 0票数 1

我只想写到一个文件大小写行中,所有实例在从输入文件下面的语句扩展属性之后,在nvp_add函数中以符号nvp_add开头,所以我希望输出类似于我的文本输出文件中的下面。

代码语言:javascript
复制
case "11": ### eventDDoSLow  

$severity
$description
$eventID
$eventURL
$alertLevel
$eventStart
$eventSourceCount
$eventSourceTable
$eventDestCount
$eventDestTable 
$eventProtocolCount
$eventProtocolTable

输入文件如下:

代码语言:javascript
复制
    case "11": ### eventDDoSLow


        include "$NC_RULES_HOME/include-snmptrap/riverbed/riverbed-
 MAZU-MIB.parser.include.snmptrap.rules"

        @URL = $eventURL

        $OS_EventId = "SNMPTRAP-riverbed-MAZU-MIB-eventDDoSLow"

        @AlertGroup = "Denial Of Service"
        @AlertKey = "Event ID: " + $eventID
        @Summary = "Denial of Service  ( Src: " + $mazuSourceName + ", Dest: " + 
 $mazuDestName + " )" + " ( " + @AlertKey + " ) "

        $DEFAULT_Severity = 2
        $DEFAULT_Type = 1
        $DEFAULT_ExpireTime = 0               

        @Identifier = @Node + " " + @AlertKey + " " + @AlertGroup + " " + 
 $DEFAULT_Type + " " + @Agent + " " + @Manager + " " + $specific-trap

        $alertLevel = $alertLevel + " ( " + $5 + " )"
        if(match($OPTION_EnableDetails, "1") or 
match($OPTION_EnableDetails_riverbed, "1")) {
            details($severity, $description, $eventID, $eventURL, $alertLevel,
$eventStart, $eventSourceCount, $eventSourceTable, $eventDestCount, $eventDestTable, 
$eventProtocolCount, $eventProtocolTable)
        }
        @ExtendedAttr = nvp_add(@ExtendedAttr, "severity", $severity, 
"description", $description, "eventID", $eventID,
             "eventURL", $eventURL, "alertLevel", $alertLevel, 
"eventStart", $eventStart,
             "eventSourceCount", $eventSourceCount, "eventSourceTable",
$eventSourceTable, "eventDestCount", $eventDestCount,
             "eventDestTable", $eventDestTable)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-18 03:03:50

代码语言:javascript
复制
import re


def main():
  caselines_index = []
  results = []
  cases = []
  nvp_add_searchterm = "nvp_add\(.+?\)"
  searchterm = "(\$.+?)[\,\)]"
  readlines = []

  with open("file.txt", 'r') as file:
    readfile = file.read()
    for line in readfile.split('\n'):
      readlines.append(line.strip())
    for line in readlines:
      if 'case "' in line:
        caselines_index.append(readlines.index(line))
    print caselines_index
    a = 0
    for line_index in caselines_index:
      int_line_index = int(line_index)
      index_of_line_index = caselines_index.index(line_index)
      case_text = ' '.join(readlines[int_line_index:caselines_index[index_of_line_index + 1]]).strip()
      case = [readlines[int_line_index].strip(), case_text]
      cases.append(case)
  with open("result.txt", 'w+') as result_file:
    for case_list in cases:
      caseline = case_list[0].strip()
      result_file.write(caseline + "\n")
      nvp = re.findall(nvp_add_searchterm, case_list[1].strip())

      for item in nvp:
        result_list = re.findall(searchterm, item)

        for result in result_list:
          if "$*" not in result:
            result_file.write(result + "\n")

if __name__=="__main__":
  main()

现在起作用了!

票数 2
EN

Stack Overflow用户

发布于 2013-08-18 03:32:51

这样可以做到:

代码语言:javascript
复制
import re

statement = '@ExtendedAttr = nvp_add'

with open('test.txt') as src, open('out.txt', 'wb') as dst:
    declaration = next(line for line in src if line.strip().startswith(statement))
    for line in src:
        declaration += line
        if ')' in line: break
    symbols = re.findall('\$[a-z]+', declaration, re.IGNORECASE) # ['$severity', '$description', '$eventID', ...
    # Now write to file
    dst.write("""case "11": ### eventDDoSLow\n""")
    for symbol in symbols:
        dst.write(symbol + '\n')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18295143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档