Forum: PC-Programmierung Python Script: automatisches Erstellen einer Datei wenn Datei voll.


von Sven (Gast)


Lesenswert?

Ich habe ein Python Skript geschrieben, welches jede Sekunde einen 
Messwert aufnimmt, und diesen mit einem Zeitstempel in eine txt. Datei 
schreibt.
Das Problem ist nun, nach einer Woche sind in dieser Datei 604800 
Messwerte, was die Datei sehr groß und unübersichtlich macht.
Ist es möglich, dass man das Skript so ändert, das nach jedem Tage (nach 
0:00 Uhr) eine Neue Datei erstellt wird ? , so das ich nach einer Woche 
7 txt. Dateien habe?


Hier das jetzige Skript:
1
while True:
2
   with open ('messwert.txt' 'rb') as input
3
        value = input.read ()
4
   with open ('dateiname.txt','ab') as output:
5
        output.write ("%s\%s  \n" % (datetime.datetime.now(),value))
6
   time.sleep(1)

von Bastler (Gast)


Lesenswert?

Einfach keinen fixen Wert als Dateinamen, sondern jeweils das aktuell 
Datum anhängen: Dateiname-2014-02-22.txt
Ist ja nicht wirklich schwer, oder ?-)

von Moritz A. (moritz_a)


Lesenswert?

1
while sleep 1; do
2
{ date '+%s'; cat messwert.txt} >> log-$(date +%F).txt
3
done

: Bearbeitet durch User
von Sven (Gast)


Lesenswert?

1
while sleep 1; do
2
{ date '+%s'; cat messwert.txt} >> log-$(date +%F).txt
3
done

Wenn ich das Skript ausführen will, wird gesagt, dass in der Zeile
1
while sleep 1
 ein fehler ist.

von Moritz A. (moritz_a)


Lesenswert?

Möglicherweise liegt es daran, dass das kein Python, sondern ein ganz 
normales Shellskript ist.

von Sven (Gast)


Lesenswert?

Gibt es den keine Möglichkeit das vorhandene Python Skript zu 
bearbeiten, so dass jeden Tag eine Neue Datei erstellt wird ?

1
Dateiname-2014-02-22.txt
Den Dateinamen mit Datum zu versehen funktioniert nicht, es wird 
trotzdem am neuen Tag keine neue Datei angelegt.

von Christian R. (supachris)


Lesenswert?

Speichere doch in einer Variable den Tag und in der Schleife dann 
Vergleichen ob aktueller Tag ungleich letz gespeicherter Tag, dann neue 
Datei. Nach dem Vergleich immer letzten Tag durch aktuellen Tag 
ersetzen. Ist doch ganz einfach.

von Sven (Gast)


Lesenswert?

1
 Ist doch ganz einfach

für einen Profi vieleicht, jedoch beschäftige ich mich erst seit 3 
Wochen mit Phyton (Programmieren).

von Bastler (Gast)


Lesenswert?

Was mir Dr Gugl sagt:
1
import time
2
timestr = time.strftime("%Y%m%d")
3
4
while True:
5
   with open ('messwert.txt' 'rb') as input
6
        value = input.read ()
7
   with open ('dateiname-'+timestring+'.txt','ab') as output:
8
        output.write ("%s\%s  \n" % (datetime.datetime.now(),value))
9
   time.sleep(1)
Praktische Erfahrung mit Python hab ich aber auch nicht. Höchsten mal 
etwas ausprobiert. Nur 30 Jahre in vielem anderen. Das hilft auch.

von Sven (Gast)


Lesenswert?

Erstmal vielen Dank. jetzt musst du mir aber erklären, was der Befehl 
+timestring+ macht ?, von wo weiß das Skript, das es jeden Tag eine neue 
Datei anlegen muss ? und nicht jede Woche oder jeden Monat ?

von Bastler (Gast)


Lesenswert?

timestr hat heute eben den Wert 20140223 und morgen 20140224.
Wenn man statt %Y%m%d einfach %Y-%m-%d schreibt, dann kann man das Datum 
im Dateinamen besser erkennen.
Und das + verkettet Strings.

von Moritz A. (moritz_a)


Lesenswert?

Der Code oben wird aber nur tun, wenn er zum Tageswechsel neu gestartet 
wird, solange das Programm läuft behält timestr seinen Wert.

von Bastler (Gast)


Lesenswert?

Das darf auch gern innerhalb der Schleife stehen. Sorry, daß ich keine 
umfangreichen Tests gemacht hab mit diesem Denkanstoß. Ich sah das 
Problem eher in der Frage des dynamischen Dateinamens.

von Christian R. (supachris)


Lesenswert?

Sven schrieb:
> für einen Profi vieleicht, jedoch beschäftige ich mich erst seit 3
> Wochen mit Phyton (Programmieren).

Naja, das Problem was du hast hat nix mit Python zu tun, sondern ist 
einfache Algorithmik. Die braucht man für jede Programmiersprache.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.