Letzte zeile einer Textdatei printen lassen?

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.
Teabag
User
Beiträge: 81
Registriert: Sonntag 13. Mai 2007, 20:44

Montag 14. Mai 2007, 15:40

Hallo
Vielen Dank für die vielen antworten, bin grad schon ab rumprobieren

Gruß Teabag
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 14. Mai 2007, 18:26

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
thelittlebug
User
Beiträge: 188
Registriert: Donnerstag 20. Juli 2006, 20:46
Wohnort: Wien
Kontaktdaten:

Montag 14. Mai 2007, 18:30

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 14. Mai 2007, 19:31

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
lunar

Montag 14. Mai 2007, 20:17

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...
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 15. Mai 2007, 06:25

Wie wäre es mit einem Bug-Report wegen "linecache.py" ?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
lunar

Dienstag 15. Mai 2007, 17:59

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... ;)
Antworten