Ich möchte bestimmte Dateien anhand eines Musters finden und diese dann Datei für Datei weiter verarbeiten.
Code: Alles auswählen
os.system('find . -type f -print0 | xargs -0 grep Muster')
Code: Alles auswählen
os.system('find . -type f -print0 | xargs -0 grep Muster')
Ob das Aufrufen von externen Shell-Kommandos da wirklich der richtige Weg ist, bezweifele ich trotzdem. Wenn man das Admin-Skript in Python schreibt, dann sollte man auch bei Python bleiben, wenn es irgend geht.Trundle hat geschrieben:Zumindest GNU grep kennt ``-r`` für rekursives Durchsuchen von Verzeichnissen.
Code: Alles auswählen
def grep_recursive(directory, pattern):
for root, dirnames, filenames in os.walk(directory):
for filename in filenames:
filename = os.path.join(root, filename)
with open(filename) as stream:
for lineno, line in enumerate(stream):
if pattern in line:
yield filename, lineno+1, line
Code: Alles auswählen
def grep_recursive(directory, pattern):
for filename in path(directory).walkfiles():
with open(filename) as stream:
for lineno, line in enumerate(stream):
if pattern in line:
yield filename, lineno+1, line
Ich denke auch, dass es schöner ist, das komplett in Python zu schreiben, wenn man eh schon einen Teil davon in Python schreibt. War eher als allgemeine Feststellung zu ``too many arguments`` gedacht.lunar hat geschrieben:Ob das Aufrufen von externen Shell-Kommandos da wirklich der richtige Weg ist, bezweifele ich trotzdem. Wenn man das Admin-Skript in Python schreibt, dann sollte man auch bei Python bleiben, wenn es irgend geht.Trundle hat geschrieben:Zumindest GNU grep kennt ``-r`` für rekursives Durchsuchen von Verzeichnissen.
Hyperion hat geschrieben:Aber für regexps müsste man die Funktionen noch erweitern! Bei grep funzen die auch so schon
Code: Alles auswählen
def grep_recursive(directory, pattern):
matches = (lambda s: pattern in s
if isinstance(pattern, basestring) else pattern.search)
for filename in path(directory).walkfiles():
with open(filename) as stream:
for lineno, line in enumerate(stream):
if matches(line):
yield filename, lineno+1, line
zu 1.): Übung macht den MeisterNa klar mag man vieles direkt in Python machen können, es ist nur die Frage, ob man sich da 1.) sicher genug drin fühlt und 2.) was schneller geht und 3.) was auch wirklich funktioniert. bei einem grep bin ich da recht sicher, da es zig Milleionen mal am Tag genutzt wird - bei einer eigenen Fumktion bin ich das sicherlich nicht!