Also arbeite ich an einem Skript, das eine Reihe von Protokolldateien durchlaufen wird, die nach Zeichenfolgen und Servernamen suchen.glob(), um Unterverzeichnisse auszuschließen
In meinem Test verwendete ich glob()
, um eine Liste von Dateien zu erstellen, durch die ich troll.
Um jedoch meine Tests zu verbessern habe ich ein Protokollverzeichnis von einem Live-System (11 GB!) Kopiert - und die Dinge sind nicht so glatt wie sie vorher waren .. es sieht aus wie glob behandelt die Unterverzeichnisse als Dateien, und als solche kämpft die readlines()
um sie zu lesen.
Ich interessiere mich nicht für Dateien in den Unterverzeichnissen, ich möchte nur die Dateien im nativen Verzeichnis durchsuchen.
Ich glaube, ich os.walk()
dies zu erreichen, verwenden kann, mit so etwas wie:
logs = next(os.walk('var/opt/server/log/current'))[2]
Im Gegensatz zu:
logs = glob('/var/opt/server/log/current/*')
Weil ich Python lerne ich sicher machen will ich lernen Dinge die richtige Art und Weise .. also bin ich richtig in dem, was ich oben sage? Oder sollte ich glob()
in einer etwas anderen Weise verwenden, um dieses Ziel zu erreichen?
Je mehr ich mit ihm spielen, um, zu realisieren, je mehr ich, dass 'next()' ist nicht das richtige Werkzeug für den Job hier, da es anheben wird 'StopIteration', wenn es das Ende der Liste erreicht. Ich nehme an, ich könnte 'try:' und 'except:' für 'StopIteration' verwenden, aber es scheint chaotisch zu sein. Ich habe gelesen, dass 'for *()' automatisch 'StopIteration' verwendet, also wäre vielleicht eine for-Schleife durch die Verzeichnisliste besser? – jonnybinthemix