我有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 )