Tipps zum Lesen in einer komplexen Datei – Python

Ich habe komplexe, variable Textdateien, die ich in Python lesen möchte, aber ich bin mir nicht sicher, was die beste Strategie wäre. Ich bin nicht auf der Suche nach Ihnen, um etwas für mich Code, nur einige Tipps, welche Module am besten zu meinen Bedürfnissen / Tipps etc.

Die Dateien sehen so aus wie:

Program Username: X Laser: X Em: X exp 1 sample 1 Time: X Notes: X Read 1 X data Read 2 X data # unknown number of reads sample 2 Time: X Notes: X Read 1 X data ... # Unknown number of samples exp 2 sample 1 ... # Unknown number of experiments, samples and reads # The 4 spaces between certain words represent tabs 

Um diese Daten zu analysieren, muss ich die Daten für jede Lesung erhalten und wissen, welche Probe und experimentieren sie aus. Außerdem kann ich das Ausgabedateiformat ändern, aber ich denke, die Art, wie ich es hier geschrieben habe, ist am einfachsten zu lesen.

Um diese Datei in Python zu lesen, ist der beste Weg, den ich mir vorstellen kann, in Zeile für Zeile zu lesen und nach Schlüsselwörtern mit regulären Ausdrücken zu suchen. Zum Beispiel suchen Sie die Zeile für das Schlüsselwort "exp" und notieren Sie dann die Nummer danach, dann suchen Sie nach Beispiel in der nächsten Zeile und so weiter. Allerdings würde das natürlich nicht funktionieren, wenn ein Stichwort im Abschnitt "Notizen" verwendet wurde.

Also, ich bin irgendwie stumped, was würde am besten zu meinen Bedürfnissen (es ist schwer, etwas zu verwenden, wenn Sie nicht wissen, dass es existiert!)

Dank für Ihre Zeit.

One Solution collect form web for “Tipps zum Lesen in einer komplexen Datei – Python”

Es ist eine typische Aufgabe für einen syntaktischen Analysator . In diesem Fall, da

  • Lexikalische Konstrukte überqueren nicht die Liniengrenzen und es gibt ein einzelnes Konstrukt ("Aussage") pro Zeile. Mit anderen Worten, jede Zeile ist eine einzige Anweisung
  • Die volle Syntax für eine einzelne Zeile kann durch einen Satz von Regexen abgedeckt werden
  • Die Struktur der Verbindungen (= Entitäten, die mehrere "Aussagen" in etwas Größeres verbinden) ist einfach und unkompliziert

Ein (relativ) einfacher scannlerloser Parser auf der Basis von Linien, DFA und dem oben erwähnten Satz von Regexen angewendet werden kann:

  • Richten Sie den Anfangs-Parser-Zustand (= aktuelle Position relativ zu verschiedenen zu verfolgenden Entitäten) und den Parse-Baum (= Datenstruktur, die die Informationen aus der Datei in einer bequemen Weise darstellt)
  • Für jede Zeile
    • Klassifizieren sie, zB durch Übereinstimmung mit den Regexen, die für den aktuellen Zustand gelten
    • Benutze die passenden Regex-Gruppen, um die aussagekräftigen Teile der Linie zu erhalten
    • Mit diesen Teilen aktualisieren Sie den Zustand und den Parse-Baum

Sehen Sie den Pfad in einer Datei innen {} von python für ein Beispiel. Dort baue ich keinen Parse-Baum (wurde nicht benötigt), sondern nur den aktuellen Zustand verfolgen.

Python ist die beste Programmiersprache der Welt.