92 votes

Grep et Python

J'ai besoin d'un moyen de rechercher un fichier en utilisant grep via une expression régulière à partir de la ligne de commande Unix. Par exemple quand je tape dans la ligne de commande :

python pythonfile.py 'RE' 'file-to-be-searched'

J'ai besoin que l'expression régulière 'RE' soit recherchée dans le fichier et imprime les lignes correspondantes.

Voici le code que j'ai :

import re
import sys

search_term = sys.argv[1]
f = sys.argv[2]

for line in open(f, 'r'):
    if re.search(search_term, line):
        print line,
        if line == None:
            print 'no matches found'

Mais quand je saisis un mot qui n'est pas présent, no matches found n'imprime pas

13voto

Concis et économe en mémoire :

#!/usr/bin/env python
# file: grep.py
import re, sys, collections

collections.deque(map(sys.stdout.write,(l for l in sys.stdin if re.search(sys.argv[1],l))),maxlen=0)

Il fonctionne comme egrep (sans trop de gestion des erreurs), par exemple :

cat input-file | grep.py "RE"

Et voici le one-liner :

cat input-file | python -c "import re,sys,collections;collections.deque(map(sys.stdout.write,(l for l in sys.stdin if re.search(sys.argv[1],l))),maxlen=0)" "RE"

Notez que la fonction collections.deque est requise dans Python3 car Map est devenue une fonction paresseuse.

9voto

miku Points 63392

Adapté d'un grep en python.

Accepte une liste de noms de fichiers via [2:], ne fait pas exception à la gestion :

#!/usr/bin/env python
import re, sys, os

for f in filter(os.path.isfile, sys.argv[2:]):
    for line in open(f).readlines():
        if re.match(sys.argv[1], line):
            print line

sys.argv[1] resp sys.argv[2:] fonctionne, si vous l'exécutez en tant qu'exécutable autonome, ce qui signifie

chmod +x

premier

5voto

jldupont Points 31331
  1. utiliser sys.argv pour obtenir les paramètres de ligne de commande
  2. utiliser open(), read() pour manipuler le fichier
  3. utiliser le module re Python pour faire correspondre les lignes

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X