Datei mit Zeitstempeln erzeugen.

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Goldrausch
User
Beiträge: 11
Registriert: Montag 16. Dezember 2013, 18:17

Mittwoch 5. Februar 2014, 22:34

Es geht um ein Raspberry Pi Projekt, ich habe einen AD-Wandler welcher jede Sekunde eine Spannugswert ausließt. Der wert wir hier in eine txt. Datei geschrieben und ständig Überschrieben:

Code: Alles auswählen

print readAnalogData
f=open ("voltCH0.txt" "w"); 
print f 



nun möchte ich, das die Datei nicht überschrieben wird, sondern dass die einzelnen Werte mit ein einem Zeitstempel versehen werden. Wie muss hier das Python Skript aussehen ? (Entschuldigung, das ich frage, ich bin totaler Neuling im Bereich Programmieren)
EyDu
User
Beiträge: 4872
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Mittwoch 5. Februar 2014, 23:04

Hallo,

in deinem Beispiel wird nichts in eine Datei geschrieben. Hast du schon das Standardtutorial oder alternativ dieses hier durchgearbeitet? Arbeiten mit Dateien sind Grundlagen.
Das Leben ist wie ein Tennisball.
Goldrausch
User
Beiträge: 11
Registriert: Montag 16. Dezember 2013, 18:17

Freitag 7. Februar 2014, 14:42

So, ich habe es jetzt geschaft, ein Skript zu schreiben welches das Datum in eine Datei schreibt.

Code: Alles auswählen

#!/usr/bin/python

import time
from time import*

lt =localtime ()

jahr, monat, tag = lt [0:3]
print "Datum: %02i,%02i%04i" % (tag,monat,jahr)

f =open("time.txt", "w");
print f
value = "Datum: %02i,%02i%04i" % (tag,monat,jahr)
myString = str (value)
f.write(my String)

- Was ich jedoch nicht hin bekomme ist, das das Skript jede Sekunde die Datei abc.txt ausliest und dazu das Datum schreibt.

Also es soll in etwa wie folgt aussehen: lese jede Sekunde die Datei abc.txt aus und schreibe den Wert mit einem Zeitstempel in die Datei time.txt
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

Freitag 7. Februar 2014, 15:30

Schreiben schaffst Du, dann schaffst Du auch... das andere. ;-) Wie könnte denn eine Funktion heißen, die das Gegenteil von "write" macht?
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Sirius3
User
Beiträge: 10771
Registriert: Sonntag 21. Oktober 2012, 17:20

Freitag 7. Februar 2014, 15:42

@Goldrausch: Was ist denn das für ein krankes Datumsformat? Es vereint alle Nachteile in einem: man erkennt nicht, dass es sich um ein Datum handelt, falls doch ist es schwer lesbar und sortieren kann man es auch nicht.
»value« ist schon ein String, die »myString«-Zeile ist also unsinnig. »time« wird importiert aber nicht benutzt, der Sternchenimport dagegen ist schlechter Stil. Wenn Du das datetime-Modul verwendest, hast Du auch eine schöne Formatiersyntax.
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Freitag 7. Februar 2014, 16:31

Wie Sirius3 schon sagte, mit `datetime` tut man sich da mehr einen groesseren Gefallen. So schoen wie es bei dem Format werden kann:

Code: Alles auswählen

In [4]: datetime.date.today().strftime("Datum: %d,%m%y")
Out[4]: 'Datum: 07,0214'
Wie man das jetzt von "Monat,Jahr", "Tag des Jahres,Jahr" etc unterscheiden koennen soll ist mir aber auch ein Raetsel.

Und wie das immer so ist, gibt es auch einen Standard fuer Daten:

Code: Alles auswählen

In [5]: datetime.date.today().isoformat()
Out[5]: '2014-02-07'
Goldrausch
User
Beiträge: 11
Registriert: Montag 16. Dezember 2013, 18:17

Freitag 7. Februar 2014, 19:43

So ich habe jetzt was neues ausprobiert, jedoch wird kein wert in die Datei time.txt geschrieben:
wo liegt der Fehler ?

Code: Alles auswählen

import time
while True:
  with open('abc.txt', 'rb') as input:
    value = input.read()
  with open('time.txt,'ab') as output:
    output.write, ("%s\t%s\n % time.time()", value)
  time.sleep(1)
Zuletzt geändert von Anonymous am Freitag 7. Februar 2014, 21:29, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Freitag 7. Februar 2014, 19:49

Goldrausch hat geschrieben:

Code: Alles auswählen

with open('time.txt,'ab') as output:
    output.write, ("%s\t%s\n % time.time()", value)
Das Komma hat da nichts zu suchen und die Anführungszeichen hast du auch falsch gesetzt. Wenn ich raten müsste, würde ich sagen, dass folgender Aufruf richtig ist.

Code: Alles auswählen

with open('time.txt,'ab') as output:
    output.write("%s\t%s\n" % (time.time(), value))
PS: Wenn du python code postet, dann setzte diesen bitte auch in python tags. Das macht das Lesen wesentlich angenehmer.

Grüße,
anogayales
Goldrausch
User
Beiträge: 11
Registriert: Montag 16. Dezember 2013, 18:17

Freitag 7. Februar 2014, 20:03

Super das funktioniert. :P

jedoch gefällt mir der Zeitstempel nicht.
Das Datum wird wie folgt dargestellt: 1391796273.62 gibt es nicht eine schönere Möglichkeit, welche auch entzifferbar ist ?
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Freitag 7. Februar 2014, 20:51

Nochmal: Es gibt das `datetime` Modul. Je nachdem was du haben willst, solltest du dir `datetime.date` oder `datetime.datetime` anschauen.
Goldrausch
User
Beiträge: 11
Registriert: Montag 16. Dezember 2013, 18:17

Freitag 7. Februar 2014, 22:15

Wenn ich das wie folgt mache, kommt die Fehlermeldung:
TypeError: Required argument "year" (pos 1) not found

Code: Alles auswählen

    import datetime

    while True:
      with open('abc.txt', 'rb') as input:
        value = input.read()
      with open('time.txt,'ab') as output:
       output.write, ("%Y-%m-%d %H:%M:%S" % datetime.datetime(), value)
     time.sleep(1)

BlackJack

Freitag 7. Februar 2014, 22:50

@Goldrausch: Ganz sicher nicht, denn das ist keine gültige Python-Syntax. Vielleicht solltest Du weniger rumraten sondern einfach mal die Dokumentation lesen, verstehen, und dann Anwenden.
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Freitag 7. Februar 2014, 22:51

Und wie kommst du auf die Idee, dass es so funktionieren wuerde?

Weiter oben im Thread hatte ich schon ein Beispiel gepostet und die Dokumentation sagt zur formatierung folgendes: http://docs.python.org/2/library/dateti ... e.__format__
Benutzeravatar
DeaD_EyE
User
Beiträge: 326
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Freitag 11. April 2014, 14:10

Ich würde es so machen:

Code: Alles auswählen

str_from_time_now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
Wenn du das unbedingt so änhlich wie in deinem Beispiel machen willst, dann schau dir die Beispeile an: https://docs.python.org/2/library/strin ... t-examples

Code: Alles auswählen

dt = datetime.datetime.now()
>>> import datetime
>>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)
>>> '{:%Y-%m-%d %H:%M:%S}'.format(d)
'2010-07-04 12:15:58'
Methode 1 sieht aber besser aus.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten