J'ai 2 grands fichiers journaux. Je veux voir si un périphérique est dans un mais pas b et vice versa (exclure les lignes où le périphérique est commun) les fichiers ressemblent à cet exemple.python analyser 2 logfiles
04/09/2010,13: 11: 52, Authen OK, utilisateur1, Groupe par défaut, 00-24-2B-A1-08-88,29,10.1.1.1, (Par défaut) ,,,, ,, 13, EAP-TLS ,, dispositif1,
04/19/2010,15: 35: 24, Authen OK, utilisateur2, Groupe par défaut, 00-24-2B-A1-05-EA, 29,10.1.1.2 , (Par défaut) ,,,,,, 13, EAP-TLS, device2,
04/09/2010,13: 11: 52, Authen OK, utilisateur3, Groupe par défaut, 00-24-2B-A1-08 -88,29,10.1.1.3, (Par défaut) ,,,,,, 13, EAP-TLS, device3,
04/19/2010,15: 35: 24, Authen OK, utilisateur4, Groupe par défaut, 00 -24-2B-A1-05-EA, 29,10.1.1.4, (Par défaut) ,,,,,, 13, EAP-TLS, device4,
pour réitérer, j'ai besoin de périphérique (champ [- 2]) et IP (f ield [7]) pour chaque périphérique qui est dans le fichier journal a mais pas b, et qui est dans b mais pas
Voici ce que j'ai fait jusqu'à présent, mais qui semble un peu maladroit et très lent (chaque fichier a environ 400K lignes). Je crois que deux fois. Quelqu'un peut-il suggérer des gains d'efficacité s'il vous plaît? Peut-être que j'utilise la mauvaise logique ??
chst={}
chbs={}
for i,line in enumerate(open('chst.txt').readlines()):
line=line.split(',')
chst[line[-2]+','+str(i)]=','.join(line)
for i,line in enumerate(open('chbs.txt').readlines()):
line=line.split(',')
chbs[line[-2]+','+str(i)]='.'.join(line)
print "these lines are in CHST but not in CHBS"
for a in chst:
if a.split(',')[0] not in str(chbs.values()):
line=chst[a].split(',')
print line[-2], line[7]
print "\nthese lines are in CHBS but not in CHST"
for a in chbs:
if a.split(',')[0] not in str(chst.values()):
line=chbs[a].split(',')
print line[-2], line[7]
Le module sets est obsolète depuis Python 2.6. A partir de 2.6, set et frozensets sont en effet des builtins. –
Oups, l'équipe de backporting * a * été * occupée! Fixé. – katrielalex
Je suis également certain que l'appel d'éléments ne fonctionnera pas (et n'est pas non plus lié aux vues dict) - vous devriez appeler viewitems sur cette dict, supporté en commençant par 2.7. La méthode items renvoie juste une liste de paires clé/valeur, et pour les listes, l'opérateur^n'est pas supporté, tandis que viewitems renvoie une vue réelle de type dict_ietms. –