当只在一个值nvp_add-in double if-else输入语句中删除$instance时,Python脚本无法检测到不匹配

当只在一个值nvp_add-in double if-else输入语句中删除$instance时,Python脚本无法检测到不匹配,python,list,python-2.7,compare,Python,List,Python 2.7,Compare,这是下面stackoverflow问题的延续问题: 如何过滤嵌套案例以过滤掉python 当我从if的第一个nvp_加载项块中删除$apsChanConfigNumber时,上面链接中的compare python脚本无法检测到不匹配,在这种情况下有2个nvp_添加函数。如何解决问题帮助 输入文件ASCII纯文本包含以下文本: 自从我开始,我就要结束了 import re import sys from collections import Counter #sys.stdout = ope

这是下面stackoverflow问题的延续问题: 如何过滤嵌套案例以过滤掉python

当我从if的第一个nvp_加载项块中删除$apsChanConfigNumber时,上面链接中的compare python脚本无法检测到不匹配,在这种情况下有2个nvp_添加函数。如何解决问题帮助

输入文件ASCII纯文本包含以下文本:


自从我开始,我就要结束了

import re
import sys
from collections import Counter

#sys.stdout = open("result.txt", 'w+')


def intersect(list1, list2):
  for o in list1:
    if o in list2:
      list1.remove(o)
      list2.remove(o)
  return list1, list2

def read(in_file):
  cases = []
  caselines_index = []
  readlines = []
  readlines_num = []
  with open(in_file, 'r') as file:
    readfile = file.read().strip()
    for line in readfile.split('\n'):
      readlines_num.append(line.strip())
    regex = re.compile("switch\(\$\d\).+?\}", re.DOTALL)
    readfile = re.sub(regex, ' ', readfile)
    for line in readfile.split('\n'):
      readlines.append(line.strip())
    for line in readlines:
      case_search = re.search("case\s\".+?\"\:\s", line)
      if case_search:
        caselines_index.append(readlines.index(line))
    #print caselines_index
    caselines_index_iter = iter(caselines_index)
    try:
      int_line_index = int(next(caselines_index_iter))
    except:
      print "No cases found"
    try:
      int_next_index = int(next(caselines_index_iter))
    except:
      int_next_index = len(readlines) - 1
    while True:
      try:
        case_text = ' '.join(readlines[int_line_index:int_next_index]).strip()
        match1 = re.search("nvp_add", case_text)
        match2 = re.search("details", case_text)
        if match1 or match2:
          case = [readlines[int_line_index].strip(), readlines_num.index(readlines[int_line_index]) + 1, case_text]
          cases.append(case)
        int_line_index = int_next_index
        int_next_index = int(next(caselines_index_iter))
      except StopIteration:
        case_text = ' '.join(readlines[int_line_index:len(readlines) - 1]).strip()
        case = [readlines[int_line_index].strip(), readlines_num.index(readlines[int_line_index]), case_text]
        cases.append(case)
        break
  return cases

def work(cases):
  MATCH = 1
  for case_list in cases:
    details = []
    nvp_add = []
    caseline = case_list[0].strip()
    nvp = re.findall("details\(.+?\)", case_list[2].strip())

    for item in nvp:
      result_list = re.findall("(\$.+?)[\,\)]", item)

      for result in result_list:
        if "$*" not in result:
          details.append(result)

    nvp = re.findall("nvp_add\(.+?\)", case_list[2].strip())

    for item in nvp:
      result_list = re.findall("(\$.+?)[\,\)]", item)

      for result in result_list:
        if "$*" not in result:
          nvp_add.append(result)


    nvp_add_c = Counter(nvp_add)
    details_c = Counter(details)
    missing_from_details = list((nvp_add_c - details_c).elements())
    missing_from_nvp_add = list((details_c - nvp_add_c).elements())
    if missing_from_nvp_add or missing_from_details:
      MATCH = 0
      print caseline + "   LINE - " + str(case_list[1] + 1)
      for mismatch in missing_from_details:
        print "Missing from details:"
        print mismatch
      for mismatch in missing_from_nvp_add:
        print "Missing from nvp_add:"
        print mismatch
      print "\n"
  if MATCH == 1:
    print "MATCH"
  else:
    print "MISMATCHES"


def main():
  in_file = "target1.txt"
  cases = read(in_file)
  work(cases)


if __name__=="__main__":
  main()

再说一遍,这不是Python。你到底在干什么?是的这是一个包含perl的输入文件,不要搞混了。请参阅python脚本中的“如何比较以$in 2函数开头的属性并显示匹配或不匹配”。回答您其他问题的人非常乐意花时间真正理解您的问题并为您编写代码。当你对你的问题不遗余力时,你不应该总是期望事情会这样发展。首先回顾一下,至少有一个聪明人可以解决我的问题!哈哈,你不应该这么说,电视上有很多聪明的人,所以,我正好有时间帮你:,下次,试着自己编一点代码;
import re
import sys
from collections import Counter

#sys.stdout = open("result.txt", 'w+')


def intersect(list1, list2):
  for o in list1:
    if o in list2:
      list1.remove(o)
      list2.remove(o)
  return list1, list2

def read(in_file):
  cases = []
  caselines_index = []
  readlines = []
  readlines_num = []
  with open(in_file, 'r') as file:
    readfile = file.read().strip()
    for line in readfile.split('\n'):
      readlines_num.append(line.strip())
    regex = re.compile("switch\(\$\d\).+?\}", re.DOTALL)
    readfile = re.sub(regex, ' ', readfile)
    for line in readfile.split('\n'):
      readlines.append(line.strip())
    for line in readlines:
      case_search = re.search("case\s\".+?\"\:\s", line)
      if case_search:
        caselines_index.append(readlines.index(line))
    #print caselines_index
    caselines_index_iter = iter(caselines_index)
    try:
      int_line_index = int(next(caselines_index_iter))
    except:
      print "No cases found"
    try:
      int_next_index = int(next(caselines_index_iter))
    except:
      int_next_index = len(readlines) - 1
    while True:
      try:
        case_text = ' '.join(readlines[int_line_index:int_next_index]).strip()
        match1 = re.search("nvp_add", case_text)
        match2 = re.search("details", case_text)
        if match1 or match2:
          case = [readlines[int_line_index].strip(), readlines_num.index(readlines[int_line_index]) + 1, case_text]
          cases.append(case)
        int_line_index = int_next_index
        int_next_index = int(next(caselines_index_iter))
      except StopIteration:
        case_text = ' '.join(readlines[int_line_index:len(readlines) - 1]).strip()
        case = [readlines[int_line_index].strip(), readlines_num.index(readlines[int_line_index]), case_text]
        cases.append(case)
        break
  return cases

def work(cases):
  MATCH = 1
  for case_list in cases:
    details = []
    nvp_add = []
    caseline = case_list[0].strip()
    nvp = re.findall("details\(.+?\)", case_list[2].strip())

    for item in nvp:
      result_list = re.findall("(\$.+?)[\,\)]", item)

      for result in result_list:
        if "$*" not in result:
          details.append(result)

    nvp = re.findall("nvp_add\(.+?\)", case_list[2].strip())

    for item in nvp:
      result_list = re.findall("(\$.+?)[\,\)]", item)

      for result in result_list:
        if "$*" not in result:
          nvp_add.append(result)


    nvp_add_c = Counter(nvp_add)
    details_c = Counter(details)
    missing_from_details = list((nvp_add_c - details_c).elements())
    missing_from_nvp_add = list((details_c - nvp_add_c).elements())
    if missing_from_nvp_add or missing_from_details:
      MATCH = 0
      print caseline + "   LINE - " + str(case_list[1] + 1)
      for mismatch in missing_from_details:
        print "Missing from details:"
        print mismatch
      for mismatch in missing_from_nvp_add:
        print "Missing from nvp_add:"
        print mismatch
      print "\n"
  if MATCH == 1:
    print "MATCH"
  else:
    print "MISMATCHES"


def main():
  in_file = "target1.txt"
  cases = read(in_file)
  work(cases)


if __name__=="__main__":
  main()