Seite 1 von 1
Textfile Zeile finden und nachfolgende 4 Zeilen anzeigen
Verfasst: Freitag 30. Oktober 2020, 17:58
von Mrkrise-25
Hallo,
leider habe ich vom Programmieren/Skripten keine Ahnung und versuche mit verschiedenen Schnipseln meine Ideen zu verwirklichen.
Jetzt komme ich einfach nicht weiter.
Ziel ist:
Ein Raspi Zero mit Display 4X20 soll mir täglich anzeigen was am Aquarium zu tun ist.
Dafür habe ich mir bereits ein test.txt angelegt.
Inhalt (test.txt)
Code: Alles auswählen
Mo
1-Mo
Wasserwechsel 31L
Mittel 1+2
leerMo
Di
1-Di
Wasserwechsel 32L
Mittel 2+3
leerDi
Mi
1-Mi
Wasserwechsel 33L
Mittel 3+4
leerMi
Do
1-Do
Wasserwechsel 34L
Mittel 4+5
leerDo
Fr
1-Fr
Wasserwechsel 35L
Mittel 5+6
leerFr
Sa
1-Sa
Wasserwechsel 36L
Mittel 6+7
leerSa
So
1-So
Wasserwechsel 37L
Mittel 7+8
leerSo
Jetzt versuche ich mit einen Python Skript mir die jeweilen Zeilen unterhalb der Tage im Display anzeigen zu lassen.
Bis jetzt habe ich mir folgendes zusammen kopiert.
Code: Alles auswählen
from datetime import date
pfadaq = '/home/shares/aqua/test.txt'
heute = date.today()
wday = ("Mo", "Di", "Mi", "Do", "Fr", "Sa", "So")[heute.weekday()]
def main():
with open(pfadaq, 'r') as lines:
next(
(i for i, line in enumerate(lines, 1) if line.rstrip() == wday),
0
)
if __name__ == '__main__':
main()
with open(pfadaq) as f:
data = f.readlines()[7]
print(data)
Jedoch verstehe ich nicht wie dich das Ergebnis
if __name__ == '__main__':
main()
weiter verarbeiten kann.
Hoffentlich hat einer von euch etwas Zeit und Interesse und kann mir bei meinem kleinen Projekt helfen.
Vielen Dank schon mal im Voraus.
Re: Textfile Zeile finden und nachfolgende 4 Zeilen anzeigen
Verfasst: Freitag 30. Oktober 2020, 18:39
von __blackjack__
@Mrkrise-25: Das Dateiformat ist schlecht und der Quelltext komplett unsinnig. Falls Du programmieren lernen möchtest, solltest Du mit einem Grundlagentutorial anfangen. Programmieren durch zusammenkopieren und raten funktioniert nicht. Man muss verstehen was man da macht.
Re: Textfile Zeile finden und nachfolgende 4 Zeilen anzeigen
Verfasst: Freitag 30. Oktober 2020, 23:25
von Mrkrise-25
Hallo __blackjack__,
du hast vollkommen recht mit deiner Aussage, ich bin auch keiner der programmieren lernen wird.
Ich möchte mir nur ein kleines Gadget bauen, das mir die Arbeit am Aquarium etwas leichter macht und mich an meine Aufgaben erinnert.
Für meine normalen „Projekte“ finde ich fast immer fertige Lösungen, wie zum Beispiel „Home Assistent“, mit etwas guten Willen und dem Forum habe ich alles hinbekommen. (Automatisierung Gewächshaus)
Darum frage ich hier ja nach Hilfe. Wenn es euch aber keinen Spaß macht mir zu helfen, ist es auch ok.
Ich habe da leider andere Ansprüche als ihr, Ideen die ich versuche umzusetzen, halt ohne programmieren zu können.
Trotzdem wünsche ich dir und allen anderen noch ein schönes Wochenende und Danke für die ehrliche Antwort.
Liebe Grüße
MrKrise
Re: Textfile Zeile finden und nachfolgende 4 Zeilen anzeigen
Verfasst: Samstag 31. Oktober 2020, 13:57
von kbr
@Mrkrise-25: Dies lösen zu wollen, ohne Programmieren zu können, läuft darauf hinaus, dass es jemand anders für Dich erledigt. Zumindest die Basics einer Sprache wie Python zu lernen, ist gar nicht so schwierig und wird Dir helfen, einfache Sachen selbst hinzubekommen. Das kann auch einem Bastler, der gar nicht tiefer einsteigen möchte, durchaus Freude bereiten. Denn am Schluß steht dann ein Erfolgserlebnis.
Mit dem folgenden Code befindet sich in 'info' der String, den Du an das Display des RasPi senden möchtest. Der Code ist natürlich ziemlich fragil, da Du das Format der '.txt' Datei nicht ändern darfst.
Vielleicht kommst Du ja damit weiter.
Code: Alles auswählen
from datetime import date
def main(fname, offset):
start = date.today().weekday() * offset
with open(fname, encoding='utf8') as fobj:
lines = list(fobj)
info = ''.join(lines[start+1:start+offset-1])
if __name__ == '__main__':
main('/home/shares/aqua/test.txt', offset=6)
Re: Textfile Zeile finden und nachfolgende 4 Zeilen anzeigen
Verfasst: Samstag 31. Oktober 2020, 14:57
von nezzcarth
Wenn es wirklich nur das ist, geht das auch ohne Python-Kenntnisse (auch wenn ich diese nahelegen würde):
Code: Alles auswählen
grep -A4 "^$(date "+%a")$" test.txt
Sa
1-Sa
Wasserwechsel 36L
Mittel 6+7
leerSa
Ggf. musst du sicherstellen, dass die verwendeten Tageskürzel denen der Locale des Linux-Systems entsprechen. Wie die Ausgabe auf deinem Display funktioniert, weiß ich nicht. Kann man das vielleicht einfach auf irgendein Device unter /dev umleiten?
EDIT:
Oder so:
Code: Alles auswählen
awk 'BEGIN{RS="\n\n"} NR==strftime("%u"){print}' test.txt
Sa
1-Sa
Wasserwechsel 36L
Mittel 6+7
leerSa
Re: Textfile Zeile finden und nachfolgende 4 Zeilen anzeigen
Verfasst: Samstag 31. Oktober 2020, 16:34
von Mrkrise-25
Habt vielen Dank für eure Hilfe. ich habe bis jetzt im Garten hantiert und werde mich jetzt nochmal an den Rechner setzten um eure Hinweise umzusetzen.
Wahrscheinlich habt ihr recht. Ich werde mir jetzt mal eine online Schulung suchen und zumindest die Grundlagen von Python lernen.
Das es Spaß macht, wenn man die ersten Erfolge verzeichnen kann, denke ich mir.
Trotzdem vielen Dank für eure Hilfe und Tipps.
Re: Textfile Zeile finden und nachfolgende 4 Zeilen anzeigen
Verfasst: Dienstag 17. November 2020, 22:18
von __blackjack__
@kbr: `offset` klingt falsch denn der Wert ist ja kein Versatz, sondern die Blocklänge für einen einzelnen Eintrag in der Textdatei. Und `fobj` ist auch unschön. `f` ist zu kurz und Objekt ist zu nichtssagend, denn das müsste man dann ja an *jeden* Namen anhängen, denn in Python ist *alles* was man an einen Namen binden kann ein Objekt.
Das komplette Einlesen der Datei kann man sich mit `itertools.islice()` sparen.
Ungetestet:
Code: Alles auswählen
#!/usr/bin/env python3
from datetime import date
from itertools import islice
def main(filename, block_length):
start = date.today().weekday() * block_length
with open(filename, encoding="utf8") as lines:
info = "".join(islice(lines, start + 1, start + block_length - 1))
print(info)
if __name__ == "__main__":
main("/home/shares/aqua/test.txt", 6)