os.walk

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mzh
User
Beiträge: 295
Registriert: Dienstag 3. März 2009, 15:27
Wohnort: ZH

Hallo zusammen
Ich brauche ein Skript, dass mir von einem Topdirectory aus in alle subdirectories geht und dort in relevanten '.arc' files eine Zeile ausliest und diese, zusammen mit dem Dateipfad, so dass ich weiss in welchem File die Zeile stand, in eine Übersicht schreibt.
Ich bin gerade auf os.walk() gestossen, was mir einen Grossteil der Arbeit abzunehmen scheint. Dann brauche ich jetzt die grep() Funktion einzubauen und das File-Schreiben.

Bin gerne offen für weiteren hilfreichen Input in diesem Zusammenhang. Was gibt es da denn sonst noch für hilfreiche Tools? Gibt es evtl. ein Pythonequivalent für 'grep'`?

Besten Dank für Hinweise
[url=http://www.proandkon.com]proandkon.com[/url]
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wüßte ich jetzt nicht auf Anhieb. Du könntest mal bei pypi.python.org gucken, ob es da ein Modul gibt.

Ansonsten sehe ich auf Anhieb zwei Möglichkeiten:

- Du öffnest die Dateien und guckst, ob beim Iterieren über alle Zeilen der Suchausdruck im String enthalten ist
- Du durchsuchst die geöffnete Datei mit einem RegExp.

Ohne in die Datei reinzugucken, geht es halt nicht.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
mzh
User
Beiträge: 295
Registriert: Dienstag 3. März 2009, 15:27
Wohnort: ZH

ich habe mal den Rückgabewert von walk() an eine Variable zugewiesen.

Code: Alles auswählen

a = walk('dir')
'a' ist dann ein generator object. Ich hab noch nicht viel damit gemacht, aber was kann ich denn mit dem Generator object machen?

Code: Alles auswählen

for i in a:
print i
scheint mir nicht viel anderes zu tun als was eine list auch tun würde.
[url=http://www.proandkon.com]proandkon.com[/url]
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Naja, Du kannst eben drüber iterieren; zusammen mit dem fnmatch-Modul kommst Du an die gewünschten Dateien:

Code: Alles auswählen

In [5]: from os import walk

In [6]: from fnmatch import fnmatch

In [9]: for dirpath, dirnames, filenames in walk("."):
   ...:     for filename in filenames:
   ...:         if fnmatch(filename, "*.py"):
   ...:             print filename
   ...:
Würde jetzt aus dem aktuellen Verzeichnis alle Dateien finden, die mit ".py" anfangen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
mzh
User
Beiträge: 295
Registriert: Dienstag 3. März 2009, 15:27
Wohnort: ZH

sehe ich das richtig, ich kann den 'Inhalt' von a nur einmal auflisten?
[url=http://www.proandkon.com]proandkon.com[/url]
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

mzh hat geschrieben:sehe ich das richtig, ich kann den 'Inhalt' von a nur einmal auflisten?
Was meinst Du mit "a"? Den Namen "a" aus Deinem obigen Post? Nö. Kannst den Aufruf doch ständig wiederholen - oder was meinst Du genau?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@mzh: Das siehst Du richtig. Beziehungsweise hat `a` ja gar keinen Inhalt. Das ist ja der Witz von so einem Iterator, dass der "Inhalt" nicht zu einem Zeitpunkt komplett vorhanden sein muss, sondern die Elemente erst bei Bedarf erzeugt werden.
mzh
User
Beiträge: 295
Registriert: Dienstag 3. März 2009, 15:27
Wohnort: ZH

ok danke für den hinweis.
[url=http://www.proandkon.com]proandkon.com[/url]
Antworten