Hallo liebe Leute,
bin relativ neu im programmieren und bräuchte eure Hilfe.
- Was es bisher kann: .txt Dateien einlesen und durch eine RegEx wichtige Informationen filtern.
- Mein Ziel: Die gefilterten Informationen in eine Excel Tabelle automatisch in Zeile und Spalte einfügen.
(Warum so umständlich denkt ihr bestimmt, ich möchte später automatisch Messwerte vom FTP runterladen und diesen Prozess automatisieren )
Mein aktueller Code:
import re
file_object = open("C:\\Users\\yokay\\Desktop\\Excel_2018_03_07_00_03_27.txt", mode="r")
file_data = file_object.read()
result = r'\t([0-9]+)\t(-*[0-9]+\,*[0-9]*)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)'
matches = re.finditer(result, file_data, re.MULTILINE)
for matchNum, match in enumerate(matches):
matchNum = matchNum + 0
print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
Die Ausgabe in der Console:
Match 227 was found at 188681-189163: 1520377256 204,07 3,623 286,27 33,54 3,358 190,87 197,24 4,519 220,08 264,76 3,751 235,05 -29,22 -44,30 -12,37 2,097 -14,55 30,30 -3,174 3,799 -34,30 -44,29 -35,99 2,474 9,572 11,81 -4,243 2,873 20,43 2,924 31,84 5,504 4,124 -5,530 0,6328 149,70 3,765 160,29 72,27 157,00 3,251 262,33 -1,313 4,191 83,07 4,281 109,80 144,60 4,654 197,33 259,22 4,162 190,59 49,89 3,511 138,78 140,93 9,612 3,005 10,33 0,2771 -15,63 4,364 -8,474 -0,9014 4,798 154,35 5,920 116,03 155,04 2,919 124,87
Die "1520377256" Ist zum Beispiel ein Gerät und die Zahlen dahinter sind Messungen die ich gerne in Excel automatisch einschreiben lassen möchte.
Habt ihr vielleicht Anregungen bzw. eine eine bessere Lösung oder ist das überhaupt möglich? oder oder oder?
Ich bedanke mich ganz herzlich im voraus!!
Mfg!
Python(Spyder) RegEx Auswertung nach Excel übertragen
Du kannst vor allem deinen Regex substantiell vereinfachen. Das Ding ist ja unglaublich. Statt überall [0..9] zb einfach \d schreiben. Aber aufgrund der Gleichförmigkeit denke ich kann man deine Daten auch viel einfacher parsen. Dazu müsste man aber mal einen Datensatz sehen.
Und was du dann damit tun willst habe ich nicht verstanden. Du kannst doch einfach eine CSV Datei erstellen, das kann Excel doch lesen. Steht ja in deinem eigenen Dateinamen. Warum reicht das nicht?
Und was du dann damit tun willst habe ich nicht verstanden. Du kannst doch einfach eine CSV Datei erstellen, das kann Excel doch lesen. Steht ja in deinem eigenen Dateinamen. Warum reicht das nicht?
Also das Problem ist, dass die Messwerte nur als .txt verfügbar sind. Da sind wie im ersten Bild zu sehen, Wörter und Zeichen etc. drin, die ich nicht haben möchte.
Deswegen dachte ich mir, dass ich diese mit einer RegEx ausfilter, um mir dann wiederum nur das was ich brauche in Excel zu schreiben. ( wenn das überhaupt möglich ist)
.txt
![Bild](https://www2.pic-upload.de/thumb/35798786/Screenshot.png)
![Bild](https://www2.pic-upload.de/thumb/35798789/Screenshot2.png)
danke für deine antwort __deets__![Smile :)](./images/smilies/icon_smile.gif)
Deswegen dachte ich mir, dass ich diese mit einer RegEx ausfilter, um mir dann wiederum nur das was ich brauche in Excel zu schreiben. ( wenn das überhaupt möglich ist)
.txt
![Bild](https://www2.pic-upload.de/thumb/35798786/Screenshot.png)
![Bild](https://www2.pic-upload.de/thumb/35798789/Screenshot2.png)
danke für deine antwort __deets__
![Smile :)](./images/smilies/icon_smile.gif)
- __blackjack__
- User
- Beiträge: 13100
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@yokay: Der reguläre Ausdruck ist viel zu lang und ganz richtig wahrscheinlich auch nicht. Zu lang weil sich da viel Information wiederholt. Wenn man etwas zig mal im Quelltext kopert und einfügt, macht man etwas falsch, denn Programmieren soll ja unter anderem genau diese manuellen, mühsamen und fehleranfälligen Wiederholungen vermeiden.
Wahrscheinlich falsch aus zwei Gründen. Erstens weil sich nach zwei Mustern die jeweils eine Zahl erkennen, das gleiche Muster 71 mal wiederholt ('\\t(-*[0-9]+\\,*[0-9]+)'), allerdings mit Unterbrechungen: da steht auch sechs mal das Muster ohne das führende '\\t' drin, also mit dem Musterteil davor zusammengenommen '\t(-*[0-9]+\,*[0-9]+)(-*[0-9]+\,*[0-9]+)'. Und das erkennt dann keine zwei Zahlen sondern nur eine, beziehungsweise auch ”Zahlen” mit mehr als einem Komma darin.
Und zweitens sind die einzelnen Muster in sich schon mehr als man eigentlich erkennen möchte, denn '*' bedeutet das davor 0 mal oder beliebig oft! Also würden auch ”Zahlen” wie '---1,,,,4' von '-*[0-9]+\\,*[0-9]+' erkannt. Was sicher so nicht gewollt ist.
Die Teilausdruck '(-*[0-9]+\\,*[0-9]+)' kommt insgesamt 77 mal in dem regulären Ausdruck vor, Dein Beispielergebnis hat aber nur 73 Gruppen. Da ist also Murks in dem regulären Ausdruck. Du willst also wahrscheinlich die beiden ersten regulären Ausdrücke für die beiden ersten Zahlen und dann den gleichen regulären Ausdruck für Kommazahlen die Nachkommastellen haben müssen 71 mal. Das kann man dann auch genau so ausdrücken:
Nun ist da noch das Problem das '*' nicht das ist was man beim '-' und dem ',' haben will. Das kann man jetzt in dieser einen Zeile korrigieren, statt in dem 1600+ Zeichen Monstermuster. Wenn es nur um das erkennen des gesamten Audrucks geht, kann man die 71 Wiederholungen auch im regulären Audrucks selbst schon angeben:
Eine Datei die man öffnet sollte man auch wieder schliessen. Oft bietet sich die ``with``-Anweisung an das sicher zu machen.
`result` ist kein guter Name für etwas das kein Ergebnis ist.
Namenskonvention ist in Python klein_mit_unterstrichen für alles ausser Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). Also `match_num` statt `matchNum`. Und man sollte Abkürzungen vermeiden damit der Leser nicht unnötig raten muss. Also `match_number`.
0 zu einer Zahl zu addieren macht keinen Sinn. Wenn `match_number` bei 1 anfangen sollte: dafür hat `enumerate()` ein optionales Argument.
Ich würde die Datei nicht komplett einlesen, sondern Zeilenweise verarbeiten. In dem Muster kommt ja kein Zeilenende vor, also sind die Daten jeweils auf eine Zeile beschränkt.
Und ich würde in diesem Fall das Muster nur zum erkennen verwenden und dann für die weitere Verarbeitung die Einzelwerte nicht aus Gruppen von dem Match-Objekt holen, sondern einfach den kompletten Match-Text an Tabulatorzeichen trennen.
Für das weitere Vorgehen ist die Frage was tatsächlich gefordert ist. Reicht eine CSV-Datei — dafür gibt es in der Standardbibliothek das `csv`-Modul. Oder muss es eine Exceltabelle sein? Dafür gibt es beispielsweise `openpyxl`.
Wahrscheinlich falsch aus zwei Gründen. Erstens weil sich nach zwei Mustern die jeweils eine Zahl erkennen, das gleiche Muster 71 mal wiederholt ('\\t(-*[0-9]+\\,*[0-9]+)'), allerdings mit Unterbrechungen: da steht auch sechs mal das Muster ohne das führende '\\t' drin, also mit dem Musterteil davor zusammengenommen '\t(-*[0-9]+\,*[0-9]+)(-*[0-9]+\,*[0-9]+)'. Und das erkennt dann keine zwei Zahlen sondern nur eine, beziehungsweise auch ”Zahlen” mit mehr als einem Komma darin.
Und zweitens sind die einzelnen Muster in sich schon mehr als man eigentlich erkennen möchte, denn '*' bedeutet das davor 0 mal oder beliebig oft! Also würden auch ”Zahlen” wie '---1,,,,4' von '-*[0-9]+\\,*[0-9]+' erkannt. Was sicher so nicht gewollt ist.
Die Teilausdruck '(-*[0-9]+\\,*[0-9]+)' kommt insgesamt 77 mal in dem regulären Ausdruck vor, Dein Beispielergebnis hat aber nur 73 Gruppen. Da ist also Murks in dem regulären Ausdruck. Du willst also wahrscheinlich die beiden ersten regulären Ausdrücke für die beiden ersten Zahlen und dann den gleichen regulären Ausdruck für Kommazahlen die Nachkommastellen haben müssen 71 mal. Das kann man dann auch genau so ausdrücken:
Code: Alles auswählen
pattern = r'\t(\d+)\t(-*\d+\,*\d*)' + 71 * r'\t(-*\d+\,*\d+)'
Code: Alles auswählen
pattern = r'\t\d+\t-?\d+,?\d*(\t-?\d+,?\d+){71}'
`result` ist kein guter Name für etwas das kein Ergebnis ist.
Namenskonvention ist in Python klein_mit_unterstrichen für alles ausser Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). Also `match_num` statt `matchNum`. Und man sollte Abkürzungen vermeiden damit der Leser nicht unnötig raten muss. Also `match_number`.
0 zu einer Zahl zu addieren macht keinen Sinn. Wenn `match_number` bei 1 anfangen sollte: dafür hat `enumerate()` ein optionales Argument.
Ich würde die Datei nicht komplett einlesen, sondern Zeilenweise verarbeiten. In dem Muster kommt ja kein Zeilenende vor, also sind die Daten jeweils auf eine Zeile beschränkt.
Und ich würde in diesem Fall das Muster nur zum erkennen verwenden und dann für die weitere Verarbeitung die Einzelwerte nicht aus Gruppen von dem Match-Objekt holen, sondern einfach den kompletten Match-Text an Tabulatorzeichen trennen.
Code: Alles auswählen
import re
def main():
filename = r'C:\\Users\yokay\Desktop\Excel_2018_03_07_00_03_27.txt'
values_re = re.compile(r'\t\d+\t-?\d+,?\d*(\t-?\d+,?\d+){71}')
with open(filename) as lines:
for line in lines:
match = values_re.search(line)
if match:
values = match.group(0).split('\t')
#
# Ignore first element because that is the empty
# string before the first tab character.
#
assert values[0] == ''
values = values[1:]
print(values)
if __name__ == '__main__':
main()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
- __blackjack__
- User
- Beiträge: 13100
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@yokay: Die Daten stehen da ja alle in einem Block, gibt es keine andere Möglichkeit den zu erkennen, so das man nur die Zeilen bis zu dem Block übergehen muss und dann den ganzen Block zeilenweise verarbeiten kann?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Erst mal vielen vielen Dank für deine ausführliche Antwort @__blackjack__ das hilft mir mega viel weiter und öffnet mir auch die Augen!!
Das ist um längen besser als das was ich da gemacht habe.![Very Happy :D](./images/smilies/icon_biggrin.gif)
Es muss leider eine Exceltabelle sein.
Ich werde mir trotzdem das 'csv'-Modul und 'openpyxl' mal anschauen !![Smile :)](./images/smilies/icon_smile.gif)
Lg
Das ist um längen besser als das was ich da gemacht habe.
![Very Happy :D](./images/smilies/icon_biggrin.gif)
Es muss leider eine Exceltabelle sein.
Ich werde mir trotzdem das 'csv'-Modul und 'openpyxl' mal anschauen !
![Smile :)](./images/smilies/icon_smile.gif)
Lg
@__blackjack__ nein leider nicht__blackjack__ hat geschrieben: ↑Donnerstag 16. August 2018, 09:33 @yokay: Die Daten stehen da ja alle in einem Block, gibt es keine andere Möglichkeit den zu erkennen, so das man nur die Zeilen bis zu dem Block übergehen muss und dann den ganzen Block zeilenweise verarbeiten kann?
![Sad :(](./images/smilies/icon_sad.gif)
- __blackjack__
- User
- Beiträge: 13100
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@yokay: Warum muss es eine Exceltabelle sein? CSV-Dateien kann Excel ja auch öffnen und der Datentyp ist in der Regel unter Windows auch mit Excel verknüpft wenn man einen Doppelklick auf so eine Datei macht. (Ausnahme natürlich wenn man kein Excel auf dem Rechner hat, oder wenn man eine andere Tabellenkalkulation mit dem Dateityp verknüpft hat. LibreOffice Calc beispielsweise.
Falls es unbedingt ein ”natives” Exceldokument sein muss, solltest Du Dir `openpyxl` nicht *trotzdem* anschauen. Das ist ja gerade zum lesen und schreiben von Exceltabellen da.
Falls es unbedingt ein ”natives” Exceldokument sein muss, solltest Du Dir `openpyxl` nicht *trotzdem* anschauen. Das ist ja gerade zum lesen und schreiben von Exceltabellen da.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Vorgaben sind oft Loesungen, die eigentlich besser als Probleme formuliert waeren, damit sie das kreative Suchen nach Antworten nicht behindern. Wenn das eigentliche Problem lautet "ich moechte eine neue Datei in Excel oeffnen, um die geladenen Werte weiter zu verarbeiten" ist CSV immer noch die bessere Loesung. Denn es ist einfacher zu schreiben und robuster in der Handhabung.
Wenn du hingegen eine bestehende XLS mit neuen Daten befuellen musst, dann musst du auf sowas wie openpyxl zurueggreifen. Handelst dir damit aber einen Sack Probleme ein, weil das modifizieren einer Datei risikoreich ist, und zusaetzlich auch noch Probleme mit geteiltem Zugriff auftauchen, die addressiert werden muessen. Entweder im Code (feststellen, dass die Datei benutzt wird, nix machen, aber beim naechsten mal die verpasste Arbeit nachholen), oder per Prozess (immer morgens um 3:00 die Datei updaten, wenn die Kollegen in Somnus Armen liegen).
Ich wuerde da an deiner Stelle in den Versuch investieren, diese Vorgabe zu hinterfragen. Das spart im Zweifel eine Menge Aerger.
Wenn du hingegen eine bestehende XLS mit neuen Daten befuellen musst, dann musst du auf sowas wie openpyxl zurueggreifen. Handelst dir damit aber einen Sack Probleme ein, weil das modifizieren einer Datei risikoreich ist, und zusaetzlich auch noch Probleme mit geteiltem Zugriff auftauchen, die addressiert werden muessen. Entweder im Code (feststellen, dass die Datei benutzt wird, nix machen, aber beim naechsten mal die verpasste Arbeit nachholen), oder per Prozess (immer morgens um 3:00 die Datei updaten, wenn die Kollegen in Somnus Armen liegen).
Ich wuerde da an deiner Stelle in den Versuch investieren, diese Vorgabe zu hinterfragen. Das spart im Zweifel eine Menge Aerger.
CSV Datei schreiben? Mit dem csv Modul. Aber fuer eine solche Diskussion brauchst du das doch gar nicht, du kannst ja eine von Hand basteln, den Kollegen geben & sie frage "wenn ihr das von mir bekommt, erfuellt das eine Anforderungen? Wenn nicht, warum nicht?" etc.
- __blackjack__
- User
- Beiträge: 13100
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Ergänzend zu __deets__: Die Leute mit den Vorgaben bekommen selbst lieber Lösungen anstatt Probleme aufgetischt, also würde ich nicht einfach nur die Vorgabe hinterfragen, nach dem Motto „Muss da wirklich…“, sondern zu der Frage gleich einen Zwischenstand präsentieren der eine CSV-Datei ausspuckt, die man einfach mit Excel öffnen kann.
Idee dahinter: Wenn man einfach nur fragt ob es eine Exceltabelle sein muss, bekommt man eventuell eine Antwort über die nicht nachgedacht wurde. Wenn der Auftraggeber sieht, dass er die CSV-Datei genau so einfach in Excel laden kann, ist es wahrscheinlicher das er dazu ja sagt.
Und der Zeitaufwand 2D-Daten erst einmal als CSV rauszuwerfen ist ziemlich gering. Wenn es am Ende doch Exceltabelle sein muss, hat man damit nicht gross Zeit verbrannt. Man kann die Option CSV-Datei auch drin lassen — dann kann das Programm beides.
Idee dahinter: Wenn man einfach nur fragt ob es eine Exceltabelle sein muss, bekommt man eventuell eine Antwort über die nicht nachgedacht wurde. Wenn der Auftraggeber sieht, dass er die CSV-Datei genau so einfach in Excel laden kann, ist es wahrscheinlicher das er dazu ja sagt.
Und der Zeitaufwand 2D-Daten erst einmal als CSV rauszuwerfen ist ziemlich gering. Wenn es am Ende doch Exceltabelle sein muss, hat man damit nicht gross Zeit verbrannt. Man kann die Option CSV-Datei auch drin lassen — dann kann das Programm beides.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Die .txt Dateien wie im Screenshot oben zu sehen, werden alle 5 Minuten aktualisiert:
Es werden alle 5 Minuten solche .txt files â 72 Sensoren runtergeladen.
Diese sollen wiederum "nur" die Messungen anzeigen ( so wie __blackjack__ es gemacht hat) und danach sollen diese Werte wiederum visualisiert werden, also zum Beispiel damit Grafiken und Diagramme erstellen können. (bzw. soll es nachdem filtern automatisch Diagramma erstellen können)
Und das am besten per Knopfdruck: Alle 5 Minuten die .txt nach den Werten filtern -> diese Werte dann in Grafiken oder Diagramme festhalten.
Ist dieses Vorhaben realisierbar?
Lg.
Danke für eure Hilfe und Zeit @__blackjack__ und @__deets__
Es werden alle 5 Minuten solche .txt files â 72 Sensoren runtergeladen.
Diese sollen wiederum "nur" die Messungen anzeigen ( so wie __blackjack__ es gemacht hat) und danach sollen diese Werte wiederum visualisiert werden, also zum Beispiel damit Grafiken und Diagramme erstellen können. (bzw. soll es nachdem filtern automatisch Diagramma erstellen können)
Und das am besten per Knopfdruck: Alle 5 Minuten die .txt nach den Werten filtern -> diese Werte dann in Grafiken oder Diagramme festhalten.
Ist dieses Vorhaben realisierbar?
![Sad :(](./images/smilies/icon_sad.gif)
![Sad :(](./images/smilies/icon_sad.gif)
Lg.
Danke für eure Hilfe und Zeit @__blackjack__ und @__deets__
- __blackjack__
- User
- Beiträge: 13100
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@yokay: Ja, das vorhaben ist realisierbar.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Also ist Excel hier nur das Tool der Wahl, weil man damit schoen Diagramme malen kann? Dann wuerde ich das sofort rausschmeissen. Mit Python und zB bokeh kannst du sich automatisch updatende, interaktive Graphen im Browser erstellen.
Warum muss es eine Exceltabelle sein? CSV-Dateien kann Excel ja auch öffnen und der Datentyp ist in der Regel unter Windows auch mit Excel verknüpft wenn man einen Doppelklick auf so eine Datei macht.yokay hat geschrieben: ↑Donnerstag 16. August 2018, 07:13 Hallo liebe Leute,
bin relativ neu im programmieren und bräuchte eure Hilfe.
- Was es bisher kann: .txt Dateien einlesen und durch eine RegEx wichtige Informationen filtern.
- Mein Ziel: Die gefilterten Informationen in eine Excel Tabelle automatisch in Zeile und Spalte einfügen.
(Warum so umständlich denkt ihr bestimmt, ich möchte später automatisch Messwerte vom FTP runterladen und diesen Prozess automatisieren ) mit book of ra kostenlos spielen
Mein aktueller Code:
import re
file_object = open("C:\\Users\\yokay\\Desktop\\Excel_2018_03_07_00_03_27.txt", mode="r")
file_data = file_object.read()
result = r'\t([0-9]+)\t(-*[0-9]+\,*[0-9]*)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)\t(-*[0-9]+\,*[0-9]+)'
matches = re.finditer(result, file_data, re.MULTILINE)
for matchNum, match in enumerate(matches):
matchNum = matchNum + 0
print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
Die Ausgabe in der Console:
Match 227 was found at 188681-189163: 1520377256 204,07 3,623 286,27 33,54 3,358 190,87 197,24 4,519 220,08 264,76 3,751 235,05 -29,22 -44,30 -12,37 2,097 -14,55 30,30 -3,174 3,799 -34,30 -44,29 -35,99 2,474 9,572 11,81 -4,243 2,873 20,43 2,924 31,84 5,504 4,124 -5,530 0,6328 149,70 3,765 160,29 72,27 157,00 3,251 262,33 -1,313 4,191 83,07 4,281 109,80 144,60 4,654 197,33 259,22 4,162 190,59 49,89 3,511 138,78 140,93 9,612 3,005 10,33 0,2771 -15,63 4,364 -8,474 -0,9014 4,798 154,35 5,920 116,03 155,04 2,919 124,87
Die "1520377256" Ist zum Beispiel ein Gerät und die Zahlen dahinter sind Messungen die ich gerne in Excel automatisch einschreiben lassen möchte.
Habt ihr vielleicht Anregungen bzw. eine eine bessere Lösung oder ist das überhaupt möglich? oder oder oder?
Ich bedanke mich ganz herzlich im voraus!!
Mfg!