在python中找到2个文件之间的公共值

时间:2017-09-11 12:28:18

标签: python-2.7 grep

我有2个文件,每个文件都有一些值。我想找出文件1中缺少的值。我已经编写了代码来检查每一行并与文件2中的每一行进行比较,但它是非常TDS。有100万行。我想知道是否有任何其他简单的方法在python中执行它,如bash和perl中的grep函数。

我还有一个问题。我的字符串等号无法正确比较字符串。我无法理解为什么

------------文件1 ----------------

    zoneset name ZS-AAAAA5-BKUP-VSAN700 vsan 700
  zone name Z-VSAN700-AAAAA7NBU1-NEW_HBA0 vsan 700
zoneset name ZS-AAAAA7-NGDS-VSAN961 vsan 961
  zone name Z-VSAN961-AAAAADB1_HBA0 vsan 961
zoneset name ZS-AAAAA-ESX-INT-PROD-VSAN3120 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH-1_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH-10_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH-2_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH-3_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH-4_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH-5_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH-6_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH-7_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH-8_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH-9_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH2-1_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH2-10_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH2-2_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH2-3_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH2-4_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH2-5_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH2-6_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH2-7_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH2-8_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH2-9_HBA0 vsan 3120

------------文件2 -------------------

zoneset name ZS-AAAAA5-BKUP-VSAN700 vsan 700
  zone name Z-VSAN700-AAAAA7NBU1-NEW_HBA0 vsan 700
zoneset name ZS-AAAAA7-NGDS-VSAN961 vsan 961
  zone name Z-VSAN961-AAAAADB1_HBA0 vsan 961
zoneset name ZS-AAAAA-ESX-INT-PROD-VSAN3120 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH-1_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH-12_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH-3_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH-3_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH-4_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH-5_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH-6_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH-7_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH-8_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH-9_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH2-1_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH2-10_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH2-2_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH2-3_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH2-4_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH2-5_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH2-6_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH2-7_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH2-8_HBA0 vsan 3120
  zone name Z-VSAN3120-AAAAA7-EFGHEFGH2-9_HBA0 vsan 3120

我的代码

def checkArgs ( args=None ):
        #print str(args)
        parser = argparse.ArgumentParser ( description= 'Script to check zoneclean up in both the Fabrics')
        parser.add_argument ( '-A', '--zonesFabricA',
                                help= 'FabricA active zones with out zone members',
                                required = 'True'
                            )
        parser.add_argument ( '-B', '--zonesFabricB',
                                help= 'FabricA active zones with out zone members',
                                required = 'True'
                            )
        files   = parser.parse_args( args )

        #print "Fabric A file", files.zonesFabricA
        #print "Fabric B file", files.zonesFabricB

        return ( files.zonesFabricA,
                 files.zonesFabricB )

def parsingInpufile ( zoneFabricAFile, zoneFabricBFile ):
        try:
                fabAFile = open ( zoneFabricAFile, 'r')
        except IOError:
                print "File {}  cannot be found ",zoneFabricAFile
        try:
                for line in fabAFile.readlines():
                        #print line
                        fabADetails     = re.search( r'zone name Z-VSAN\d+-([\w+-_]+)_HBA\d vsan (\d+)', line, re.I|re.M)
                        if fabADetails:
                                fabAZoneName    = fabADetails.group(1).upper()
                                fabAVsan        = fabADetails.group(2)
                                #print "zone name is ################### "+fabAZoneName +" vsan number "+fabAVsan
                        try:
                                #print "Fabric B file is ",zoneFabricBFile
                                fabBfile = open ( zoneFabricBFile, 'r')
                                for fabBline in fabBfile.readlines() :
                                        fabBDetails     = re.search( r'zone name Z-VSAN\d+-([\w+-_]+)_HBA\d vsan (\d+)', fabBline, re.I|re.M)
                                        if fabBDetails:
                                                fabBZoneName    = fabBDetails.group(1).upper()
                                                fabBVsan        = fabBDetails.group(2)
                                                #print "Inside Fabric B @@@@@@@@@@@@@@@@ " +fabBZoneName + " vsan san number is " + fabBVsan
                                                #print fabAZoneName,fabBZoneName
                                                if fabAVsan == fabBVsan:
                                                        if str(fabAZoneName) == str(fabBZoneName) :
                                                                print "Inside final if loop " + fabAZoneName + " === " + fabBZoneName
                                                                print "zone ***************** " + fabBZoneName + " is in Fabric B"
                                                                break
                                                        #else:
                                                        #       print fabBZoneName + " is not in Fabric B"
                                fabBfile.close()
                        except:
                                print "File "+zoneFabricBFile+ " can not be found "
                fabAFile.close()
        except IOError:
                print "Some IO erorr"

if __name__ == '__main__' :
        zoneFabricAFile = ''
        zoneFabricBFile = ''
        zoneFabricAFile, zoneFabricBFile = checkArgs( sys.argv[1:])
        print "Fabric A file", zoneFabricAFile
        print "Fabric B file", zoneFabricBFile
        parsingInpufile ( zoneFabricAFile, zoneFabricBFile )

0 个答案:

没有答案