簡體   English   中英

Python-如何僅輸入輸入文本文件中的case語句和實例以$開頭?

[英]Python - How do i write only case statements and instances start with $ from input text file?

我只想寫入一個文件大小寫行,並且所有實例在輸入文件下面的語句Extended屬性后在nvp_add函數中以符號$開頭,因此我希望在我的文本輸出文件中像下面這樣輸出。

case "11": ### eventDDoSLow  

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

輸入文件如下:


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

現在可以使用了!

可以做到這一點:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM