Teile der Datei einlesen, anhalten und mit bestimmten Wörtern beginnen

8

Ich benutze Python 2.7, und mir wurde zugewiesen (selbstgesteuerte Zuweisung, ich schrieb diese Anweisungen), um einen kleinen statischen HTML-Generator zu schreiben, und ich möchte Unterstützung bei der Suche nach neuen Python-orientierten Ressourcen zum Lesen von Teilen von Dateien gleichzeitig. Wenn jemand Code-Antworten liefert, ist das großartig, aber ich möchte verstehen, warum und wie python funktioniert. Ich kann Bücher kaufen, aber keine teuren - ich kann es mir leisten, dreißig, vielleicht vierzig Dollar in diese spezielle Forschung zu investieren.

Die Art und Weise, wie dieses Programm arbeiten soll, ist, dass es eine Datei template.html , eine Datei message.txt , ein Bild gibt Datei, eine Datei archive.html und eine Datei output.html . Das sind mehr Informationen, als Sie benötigen, aber die Grundidee, die ich hatte, war: "Lies hin und her, lies von Vorlage und Nachricht, lege ihren Inhalt in die Ausgabe und schreibe dann in das Archiv, in dem die Ausgabe existiert". Aber ich bin noch nicht da, und ich bitte dich nicht, das ganze Problem zu lösen, wie ich unten ausführlicher darlege:

Das Programm liest html von template.html ein, stoppt beim öffnenden Tag und liest dann ein, was der Titel der Seite von message.txt sein soll . Dort bin ich jetzt. Es klappt! Ich war so glücklich ... vor Stunden, als ich merkte, dass das nicht der letzte Boss war.

%Vor%

Mein Problem ist folgendes: Ich verstehe keine regulären Ausdrücke, und wenn ich verschiedene Formen von für ... in Codes ausprobiere, bekomme ich die ganze Vorlage, keine Vorlage, irgendeine Kombination der Teile der Vorlage Ich wollte nicht ... wie auch immer, wie gehe ich hin und her und lese diese Dateien und hebe dort auf, wo ich aufgehört habe? Jede Hilfe bei der Suche nach leichter verständlichen Ressourcen wird sehr geschätzt. Ich habe ungefähr fünf Stunden damit verbracht, dies zu erforschen, und ich bekomme Kopfschmerzen, weil ich immer mehr Ressourcen für ein fortgeschritteneres Publikum erhalte und diese nicht verstehe.

Dies sind die letzten zwei Methoden, die ich versucht habe (ohne Erfolg):

%Vor%

nur Punkte 0 und 3 wurden gedruckt. Ich legte die Druck-Nr. Dort, weil ich nicht herausfinden konnte, warum meine Ausgabedatei unverändert war.

%Vor%

Mit dem anderen bin ich mir ziemlich sicher, dass ich alles falsch mache.

    
NMacKenzie 19.04.2015, 23:17
quelle

3 Antworten

0
Spät gestern Abend bin ich auf eine Lösung gestoßen, die für das, was ich versucht habe, funktioniert hat. Während das Lernen regulärer Ausdrücke eine nützliche Fähigkeit sein wird, die ich definitiv über den Sommer kultivieren werde, war Regex ein bisschen viel für diese spezielle Anwendung. Am Ende habe ich linecache verwendet, um bestimmte Zeilen einzulesen, da die Informationen, die ich von diesen Dateien haben wollte, getrennt waren durch den Zeilenumbruch.

    
NMacKenzie 29.04.2015, 20:08
quelle
3

Ich würde dafür BeautifulSoup verwenden. Eine Alternative ist es, reguläre Ausdrücke zu verwenden, die sowieso gut zu wissen sind. Ich weiß, dass sie ziemlich einschüchternd wirken, aber sie sind wirklich nicht so schwer zu lernen (es dauerte eine Stunde oder so). Um zum Beispiel alle Link-Tags zu erhalten, können Sie etwas wie

tun %Vor%

Ich hoffe, dass Sie zumindest einige davon nützlich finden. Wenn Sie weitere Fragen haben, kommentieren Sie bitte meine Antwort. Viel Glück!

    
pzp 19.04.2015 23:58
quelle
3

Beim ersten Versuch haben Sie ein Einrückungsproblem. Die else-Klausel befindet sich auf derselben Ebene wie die for-Anweisung, daher bilden sie zusammen die Verbindung für: else: control structure. Neue Python-Programmierer sind dadurch oft verwirrt. Die else: -Klausel wird nur ausgeführt, wenn die for-Schleife bis zum Ende läuft, ohne auf eine break-Anweisung zu stoßen. Offensichtlich wird in deinem Fall die break-Anweisung ausgeführt, also die else: -Klausel nicht. Die else: -Klausel befindet sich außerhalb der Schleife, sodass "found" nie auf True gesetzt wird. Ich denke, wenn Sie die else: -Klausel einrücken, werden Sie das Ergebnis mögen. Ich denke auch, du könntest die Aufrufe von strip () fallen lassen und stattdessen Anweisungen wie "if '' in line:" usw. verwenden.

Ich vermute, Sie haben Recht mit der zweiten Funktion. Es macht überhaupt keinen Sinn für mich.

    
Paul Cornelius 19.04.2015 23:59
quelle

Tags und Links