Seite 1 von 2

Vielen Dank für die vielen Antworten

Verfasst: Montag 14. Mai 2007, 15:40
von Teabag
Hallo
Vielen Dank für die vielen antworten, bin grad schon ab rumprobieren

Gruß Teabag

Verfasst: Montag 14. Mai 2007, 18:26
von Leonidas
BlackJack hat geschrieben:Hat doch keiner wirklich gemacht. Und wenn gerold's Lösung abgegeben wird, dann fragt der Lehrer sicher nach. Falls der OP dann erklären kann, was der Code genau macht, hat er IMHO was gelernt und genügend eigene Leistung gezeigt.
Stimmt.

Ich gebe zu, im habe mir eine Lösung ähnlich zu gerolds im Kopf rumgehen lassen, also eine Datei von "hinten" nach Newlines abzusuchen, aber letztenlich fand ich, dass es sich nicht ohnt sowas zu implementieren. Zumindest nicht bei der Größe der meisten Dateien, sofern das überhaupt Vorteile bringt.
Man könnte es aber auch modifizieren, dass es genau einen Block am Stück liest und diesen Durchsucht. Wobei man dann wissen müsste wie groß so ein Block ist.

Verfasst: Montag 14. Mai 2007, 18:30
von thelittlebug
Ich hab warscheinlich die feigste Lösung :)

Code: Alles auswählen

import commands

meinedatei = "/var/log/messages"
meinezeile = commands.getoutput("tail -n 1 %s" % meinedatei)
print meinezeile
lgherby

Verfasst: Montag 14. Mai 2007, 19:31
von gerold
BlackJack hat geschrieben:

Code: Alles auswählen

__all__ = ["getline", "clearcache", "checkcache"]
Alles was nicht in der Doku und in `__all__` enthalten ist, würde ich als Implementationsdetail betrachten.
Hallo BlackJack!

Ich habe mir "linecache.py" durchgelesen und habe das Gefühl, dass einfach nur vergessen wurde, "getlines" in "__all__" rein zu schreiben. Vielleicht hat der Programmierer auch nur gedacht, dass "getlines" niemand brauchen wird. Ich sehe hier aber keinen Grund, weshalb man es nicht verwenden sollte. :K Habe ich etwas übersehen?

Außerdem finde ich, dass "getline" komisch ist. :roll: Warum wird nicht 0 als erste Zeilennummer verwendet? Warum wird nicht zugelassen, dass auf die Liste mit den Zeilen per "slicing" zugegriffen werden kann? Das ganze Modul fühlt sich irgendwie komisch an.

Edit:

Wie ich aus der History ersehe, hat "montanaro" erst neun Jahre nach Erstellen des Moduls "__all__" nachgetragen. Ich glaube also nicht, dass es im Sinne des Erfinders ist, dass "getlines" nicht benutzt werden soll.

Siehe: http://svn.python.org/view/python/trunk ... 2&view=log

lg
Gerold
:-)

Verfasst: Montag 14. Mai 2007, 20:17
von lunar
gerold hat geschrieben:Das ganze Modul fühlt sich irgendwie komisch an.
Liegt wohl daran, dass es eine eher interne Sache ist, die vor allem für die Kontextzeilen bei Tracebacks benötigt wird...

Verfasst: Dienstag 15. Mai 2007, 06:25
von jens
Wie wäre es mit einem Bug-Report wegen "linecache.py" ?

Verfasst: Dienstag 15. Mai 2007, 17:59
von lunar
jens hat geschrieben:Wie wäre es mit einem Bug-Report wegen "linecache.py" ?
Feel free... ich sehe den Sinn nicht so ganz. getlines kann man auch flott selbst schreiben:

Code: Alles auswählen

def getlines(filename):
    # Dateien werden doch hoffentlich beim Verlassen des Blocks geschlossen oder?
    return open(filename).readlines()
linecache ist wirklich nur dann sinnvoll, wenn man bei mehreren Dateien immer wieder random access Zugriffe auf einzelne Zeilen durchführt. Ansonsten ist linecache, wie BlackJack schon anmerkte, eher Speicherverschwendung, weil Zeilen noch weit über die eigentliche Anwendung hinaus im Speicher vorgehalten werden.

Um ehrlich zu sein, ich würde die letzte Zeile einer Datei in einer richtigen Anwendung auch nicht per linecache extrahieren... ;)