In Datei Zeilenzahl zwischen zwei Markierungen finden

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
zappa
User
Beiträge: 26
Registriert: Samstag 19. März 2011, 22:31

Hi, ich such nach einer Möglichkeit in einer html-Datei die Anzahl der Zeilen zwischen zwei vorher gesetzten Markierungen zu zählen und steh da grade auf dem Schlauch.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

zappa hat geschrieben:Hi, ich such nach einer Möglichkeit in einer html-Datei die Anzahl der Zeilen zwischen zwei vorher gesetzten Markierungen zu zählen und steh da grade auf dem Schlauch.
Meinst du mit Zeilen reale Zeilen der Datei? In dem Fall ist es völlig unerheblich, dass es sich um eine HTML-Datei handelt.

Die Vorgehensweise ist recht einfach. Nach dem Öffnen der Datei durchläufst du jede Zeile, schaust nach ob deine Startmarkierung vorkommt und merkst dir die Zeilennummer. Wenn die Endmarkierung kommt berechnest du die Differenz.

Ungetesteter Code:

Code: Alles auswählen

def get_line_difference(filename):
    with open(filename, 'r') as f:
        for linenumber, line in enumerate(f):
            if "abc" in line:
                start = linenumber
            if "xyz" in line:
                return linenumber - start
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@zappa: Was ist das eigentliche Problem, das gelöst werden soll? Setzt du die Markierungen selber oder hast du keinen Einfluss darauf? Welchen Sinn soll das Zählen der Zeilen haben? Falls du die Markierungen selber setzt: Bist du sicher, dass du nicht lieber mit einem HTML-Parser nach bestimmten Tags suchen willst, anstatt die Markierungen zu setzen?
zappa
User
Beiträge: 26
Registriert: Samstag 19. März 2011, 22:31

Dankeschön an /me - das probier ich mal so aus.
snafu - die Markierungen setzte ich selbst. Ich möchte nur für die Druckausgabe der html-Seite ein page-break-after-Befehl einfügen, damit der Ausdruck ordentlich aussieht.
Ist das mit einem html-Parser möglich?
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

zappa hat geschrieben:Ich möchte nur für die Druckausgabe der html-Seite ein page-break-after-Befehl einfügen, damit der Ausdruck ordentlich aussieht.
Dir ist aber schon klar, dass die Anzahl der Zeilen in der Datei nichts mit der Anzahl der Zeilen in der Ausgabe zu tun hat?
zappa
User
Beiträge: 26
Registriert: Samstag 19. März 2011, 22:31

:oops: au Mann, daran hab ich gar nicht gedacht. Vielleicht wäre es dann sinnvoller die einzelnen Zeichen zu zählen. Das müsste doch funktionieren - oder?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

zappa hat geschrieben::oops: au Mann, daran hab ich gar nicht gedacht. Vielleicht wäre es dann sinnvoller die einzelnen Zeichen zu zählen. Das müsste doch funktionieren - oder?
Vielleicht wäre es besser, wenn Du (noch einmal?) über snafus Posting nachdenkst und Dir einen HTML-Parser schnappst ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Zeichen zaehlen macht auch nur dann Sinn, wenn du den Quelltext drucken willst, willst du tatsaechlich die Seite drucken, brauchst du erstmal einen Renderer - auch ein Parser hilft hier nicht viel.

Und dann ... solltest du dir einen anderen Ansatz suchen, denn die Ausgabe einer HTML Seite hat nicht unbedingt viel mit deren textueller Beschreibung zu tun dank CSS und Konsorten.

Was ist denn dein eigentliches Problem?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

cofi hat geschrieben:Zeichen zaehlen macht auch nur dann Sinn, wenn du den Quelltext drucken willst, willst du tatsaechlich die Seite drucken, brauchst du erstmal einen Renderer - auch ein Parser hilft hier nicht viel.
Ah... jetzt habe ich sein eigentliches Problem erst verstanden :oops: Ich dachte er *wüßte*, wo der Befehl hin muss...

Ja, das wird bei HTML wohl eher nix - spräche denn etwas gegen ein anderes Format? Evtl. kann man das Dokument ja in LaTeX o.ä. umwandeln?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@zappa: Was spricht denn gegen die Seitenumbrüche, die sozusagen auf natürliche Weise beim Ausdrucken entstehen?
zappa
User
Beiträge: 26
Registriert: Samstag 19. März 2011, 22:31

Also mal vielen Dank für die vielen Antworten.
In meinem python-programm sind Formularfelder, die man mit beliebig viel Text ausfüllen kann. Dieser Text wird dann in eine html-Seite eingebunden.
Wenn ich die Seite ausdrucken möchte gibt es ja - am Seitenende - einen automatischen Seitenumbruch. Dieser Seitenumbruch ist dann manchmal an sehr ungünstigen Stellen, z.b. genau nach einer Überschrift - da hätte ich natürlich die Überschrift gerne au der folgenden Seite, auf der dann auch das ganze dazu passende Kapitel steht.
LaTeX hatte ich auch schon mal überlegt; das läuft aber nicht auf den Rechnern, auf denen das Skript läuft.
BlackJack

@zappa: Das beschriebene Problem kannst Du doch umgehen in dem Du den umgekehrten Weg gehst, also nicht irgendwo per Hand Seitenumbrüche einfügen sondern Seitenumbrüche hinter Überschriften verbieten durch ein ein 'page-break-after: never' (aus dem Kopf, hoffe das ist richtig so).
zappa
User
Beiträge: 26
Registriert: Samstag 19. März 2011, 22:31

BlackJack hat geschrieben: 'page-break-after: never' (aus dem Kopf, hoffe das ist richtig so).
Die Rettung BlackJack. Es ist das

Code: Alles auswählen

page-break-inside:avoid
Du hast ganz richtig gelegen. Damit verhindere ich den Seitenumbruch in meinem Abschnitt (<p>blablabla</p>.
Vielen Dank - jetzt sieht meine html-Seite endlich ordentlich aus :D
Antworten