Je souhaite "grep" plusieurs expressions rationnelles sur plusieurs fichiers. J'ai tous ces regex dans un fichier (un par ligne), que je charge de la manière suivante, la construction d'un « super regex »:Python: Comment rechercher plusieurs paterns dans plusieurs fichiers
dic = open('regex.dic')
rex = []
for l in iter(dic):
if not l.startswith('#'):
rex.append('^.*%s.*$' % l.strip())
rex = '|'.join(rex)
debug('rex='+rex)
global regex
regex = re.compile(rex, re.IGNORECASE|re.MULTILINE)
dic.close()
Puis-je consulter mes fichiers comme ceci:
with open(fn, 'r') as f: data = f.readlines()
for i, line in enumerate(data):
if len(line) <= 512: #Sanity check
if regex.search(line):
if not alreadyFound:
log("[!]Found in %s:" % fn)
alreadyFound = True
found = True
copyFile(fn)
log("\t%s" % '\t'.join(data[i-args.context:i+args.context+1]).strip())
Cela fonctionne. Je pense que ce n'est vraiment pas efficace et dangereux (certains regex dans le dic pourraient casser le "super regex"). Je pensais à en boucle dans le tableau regex, mais cela signifierait de numériser chaque fichier plusieurs fois:/
Une idée brillante sur la façon de faire cela? Merci!
Je ne vois vraiment pas de problème avec ça. Pas nécessairement particulièrement élégant, mais comme vous le dites, il fait le travail avec une efficacité relative. – jdotjdot