Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Equivalent fonction grep

8 réponses
Avatar
ReM
Bonjour,

Je suis sous Linux MDK / Python 2.3

Existe t il une fonction equivalente à grep en python, plus sypa et plus
"portable que" :
resultat = os.system( "grep -r toto *" )

Merci

ReM

8 réponses

Avatar
f
ReM wrote:
Bonjour,

Je suis sous Linux MDK / Python 2.3

Existe t il une fonction equivalente à grep en python, plus sypa et plus
"portable que" :
resultat = os.system( "grep -r toto *" )

Merci

ReM


bonjour,

un coup d'oeil à :

http://python.org/doc/2.3.5/lib/module-re.html

devrait vous éclairer sur les expressions régulières et vous aider à
implémenter un grep en python

Avatar
Guillaume Bouchard
ReM wrote:
Bonjour,


Bonjour,

Je suis sous Linux MDK / Python 2.3


Quelqu'un de bien ;o) (Enfin sauf la mdk.. ;o)

Existe t il une fonction equivalente à grep en python, plus sypa et plus
"portable que" :
resultat = os.system( "grep -r toto *" )


Je m'ennuyais, alors. C'est surement trés pérfectible :)

--------------------------------
import os
import re

def grep(dir,pattern):
"""Bad implentation of GNU grep
"""
for i in os.listdir(dir):

# Ignore hidden files
if i.startswith('.'):
continue

file = os.path.join(dir,i)

# Look in the file
if os.path.isfile(file):
fp = open(file)

for line in fp:
if pattern.search(line):
print file + ":"+line.rstrip()

fp.close()

# Recursivly parse directory
elif os.path.isdir(file):
grep(file,pattern)


grep(os.curdir,re.compile('import [a-z]+'))

--
Guillaume.

Avatar
f
ReM wrote:
Bonjour,

Je suis sous Linux MDK / Python 2.3

Existe t il une fonction equivalente à grep en python, plus sypa et plus
"portable que" :
resultat = os.system( "grep -r toto *" )

Merci

ReM



http://www.peterbe.com/plog/grep-results-expanded/Grepexpansion.py

http://www.peterbe.com/plog/grep-results-expanded

yaka demander en fait :)

Avatar
ReM
ReM wrote:

Bonjour,



Bonjour,

Je suis sous Linux MDK / Python 2.3



Quelqu'un de bien ;o) (Enfin sauf la mdk.. ;o)


Pourquoi ???


Existe t il une fonction equivalente à grep en python, plus sypa et
plus "portable que" :
resultat = os.system( "grep -r toto *" )



Je m'ennuyais, alors. C'est surement trés pérfectible :)

--------------------------------
import os
import re

def grep(dir,pattern):
"""Bad implentation of GNU grep
"""
for i in os.listdir(dir):

# Ignore hidden files
if i.startswith('.'):
continue

file = os.path.join(dir,i)

# Look in the file
if os.path.isfile(file):
fp = open(file)

for line in fp:
if pattern.search(line):
print file + ":"+line.rstrip()

fp.close()

# Recursivly parse directory
elif os.path.isdir(file):
grep(file,pattern)


grep(os.curdir,re.compile('import [a-z]+'))



Merci ;o)


Avatar
ReM
ReM wrote:

Bonjour,

Je suis sous Linux MDK / Python 2.3

Existe t il une fonction equivalente à grep en python, plus sypa et
plus "portable que" :
resultat = os.system( "grep -r toto *" )

Merci

ReM




http://www.peterbe.com/plog/grep-results-expanded/Grepexpansion.py

http://www.peterbe.com/plog/grep-results-expanded

yaka demander en fait :)


Intéressant mais c pas vraiment ce que je recherchais !
Merci quand même :o)


Avatar
Guillaume Bouchard
f wrote:
http://www.peterbe.com/plog/grep-results-expanded/Grepexpansion.py


Idee interessant que je vais m'empresser de reprendre et d'amélioré.
Cependant je ne crois pas que c'etait la question ;o)

--
Guillaume.

Avatar
Guillaume Bouchard
ReM wrote:
Quelqu'un de bien ;o) (Enfin sauf la mdk.. ;o)
Pourquoi ???



<troll baveux>
Mdk c'est le mal...
</troll>

Non rien :)

grep(os.curdir,re.compile('import [a-z]+'))


Merci ;o)


De rien. Je te conseil quand même :

1) De relire le truc et de comprandre. Je fais du Python depuis 1
semaine, donc je pense que ce n'est pas si complexe
2) De blinder la fonction. C'est surement nettement ameliorable.
Nottament pour éviter de parser les fichiers binaires. J'ai chercher
dans os.path une fonction style isbinary, mais pas trouvé...

Pour l'instant tu peux modifier le bloc for line in fp comme ceci :

for line in fp:
if '' in line: # Cette ligne en +
break # Celle ci aussi
if pattern.search(line):
print file + ":"+line.rstrip()



Sur mon home qui contient 191 fichiers dont 58 binaries d'environs 40 MO
chacuns, je passe de 25 secondes à 0.3. Approuvé :)

--
Guillaume


Avatar
Guillaume Bouchard
Guillaume Bouchard wrote:
Sur mon home qui contient 191 fichiers dont 58 binaries d'environs 40 MO
chacuns, je passe de 25 secondes à 0.3. Approuvé :)


Il falait evidament lire 4 MO. Ce qui prouve encore plus que
l'optimisation fonctionne.

--
Guillaume.