Ergebnis einer Pythonausgabe in Datei schreiben

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
jollepe
User
Beiträge: 4
Registriert: Montag 21. Juli 2014, 23:55

Hallo,

ich bin noch Neuling auf dem Gebiet von Python.
Ich habe ein Raspberry PI und wollte dort sekündlich den Wert eines Thermometers einlesen
und in einer .txt Datei schreiben, sodass ich am Tagesende eine Verlaufskurve daraus erstellen lassen kann.

Das Skript vom Thermometer ist fertig.
Jedoch benötige ich eure Hilfe, wie ich nun die zeilenweise Ausgabe in eine Datei speichern
kann.

Optimal wäre ein übergeordneter Befehl, der an jedem neuen Tag eine neue .txt Datei anlegt und die neuen Thermometerausgaben
einspeichert.

Hier mein Thermoskript:

Code: Alles auswählen


import os
import glob
import time
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'
def read_temp_raw():
f = open(device_file, 'r')
lines = f.readlines()
f.close()
return lines
def read_temp():
   lines = read_temp_raw()
   while lines[0].strip()[-3:] != 'YES':
      time.sleep(0.2)
      lines = read_temp_raw()
   equals_pos = lines[1].find('t=')
   if equals_pos != -1:
      temp_string = lines[1][equals_pos+2:]
      temp_c = float(temp_string) / 1000.0
      temp_f = temp_c * 9.0 / 5.0 + 32.0
      return temp_c, temp_f
while True:
   print(read_temp())
   time.sleep(1)

Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Mit

Code: Alles auswählen

import datetime
log_filename = datetime.datetime.now().strftime('%Y-%m-%d.log')
kannst Du Dir die Dateinamen erzeugen lassen.

Mit

Code: Alles auswählen

datetime.datetime.now().day
kannst Du den aktuellen Tag (im Monat) abfragen. Den fragst Du in der Endlosschleife ab und wenn er sich geändert hat, dann machst Du die aktuelle Datei zu und machst eine neue Datei auf.
jollepe hat geschrieben:device_file = device_folder + '/w1_slave'
Das würde ich eher so machen:

Code: Alles auswählen

device_file=os.path.join(device_folder, 'w1_slave')
Außerdem ist das auch kein device_file, sondern der device_filename.
a fool with a tool is still a fool, www.magben.de, YouTube
Benutzeravatar
mobby
User
Beiträge: 76
Registriert: Donnerstag 17. April 2014, 09:43

@jollepe: Ich würde die Module "w1-gpio" und "w1-therm" nicht über das Python Skript laden, sondern in die Moduldatei (/etc/modules) schreiben. So werden die Module bei jedem Start des PI automatisch geladen und müssen nicht per Hand nachgeladen werden.

Wichtig dabei ist, dass du nur den Modulnamen, also "w1-gpio" und "w1-therm" in die Datei schreibst, das "modprobe" muss weggelassen werden.
jollepe
User
Beiträge: 4
Registriert: Montag 21. Juli 2014, 23:55

Wie bekomme ich in einer endlos Schleife am sinnvollsten eine Zeitangabe rein die sich bei jedem Schleifendurchlauf aktualisiert
und nicht beim compilen festgelegt wird?

Hätte gerne folgende Syntax: %H:%M:%S %d%m%Y
Mit dem Modul datetime.datetime.now() wird bei mir nur eine Uhrzeit dauerhaft angezeigt.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

jollepe hat geschrieben:Hätte gerne folgende Syntax: %H:%M:%S %d%m%Y

Code: Alles auswählen

datetime.datetime.now().strftime('%H:%M:%S %d%m%Y')
a fool with a tool is still a fool, www.magben.de, YouTube
jollepe
User
Beiträge: 4
Registriert: Montag 21. Juli 2014, 23:55

Bin leider noch nicht merklich weiter gekommen in meinem Vorhaben,
könnt ihr mir noch ein bisschen Input geben für die Programmierung.
Bin bisher nur C und C++ geübt, Python ist für mich komplett neu.

Also der normale Quellcode läuft soweit wie gewünscht.
Es wird in einem vorgegeben zeitlichen Abstand eine Messung durchgeführt und im Terminal angezeigt.

Nun möchte ich das das Skript dauerhaft läuft und jeden Tag eine neue Datei erzeugt und dort die
neusten Messungen reinschreibt.

Könnt ihr mir noch bisschen helfen?

Vielen Dank
Gruß
Julian
Benutzeravatar
Kebap
User
Beiträge: 786
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Hallo Julian,

ich hätte gedacht, dass MagBen dir schon das meiste gegeben hat, das dazu nötig sein wird. Hast du irgendwelche konkreten Fragen? Hast du schon einen Versuch gestartet, der aber nicht ganz funktionierte, den du uns zeigen kannst?
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
BlackJack

Man könnte auch das `logging`-Modul und dort einen `TimedRotatingFileHandler` verwenden.
jollepe
User
Beiträge: 4
Registriert: Montag 21. Juli 2014, 23:55

Kebap hat geschrieben:Hallo Julian,

ich hätte gedacht, dass MagBen dir schon das meiste gegeben hat, das dazu nötig sein wird. Hast du irgendwelche konkreten Fragen? Hast du schon einen Versuch gestartet, der aber nicht ganz funktionierte, den du uns zeigen kannst?
Naja ich kann ehrlich gesagt mit den Tipps leider nicht viel Anfangen :K
Es fehlt mir aktuell bisschen die Übersicht, wann welcher Befehl mit welchem Syntax vereinbar ist :oops:
BlackJack

@jollepe: Die Beschreibung ist ein bisschen zu allgemein um da jetzt weiter zu helfen. Es gibt kaum ”Befehle” in Python, die sind auch alle Syntax, also muss man da nichts vereinbar sein. Und welche Syntax von einem Datentyp durch Implementierung der entsprechenden Methoden unterstützt wird, muss man halt nachlesen. Wobei in den Hinweisen von MagBen auch gar nichts syntaktisch exotisches vorkam, eigentlich nur Attributzugriff per ``.``-Operator und Aufrufe mittels ”Aufrufoperator”, also Klammern mit Null oder mehr Argumenten nach dem Ausdruck der etwas aufrufbares als Ergebnis hat. Welche Module welche Funktionen und Datentypen enthalten und was die Funktionen zurückgeben und welche Methoden die Datentypen haben, hat alles nichts mit Syntax zu tun, sondern steht halt in der Dokumentation zu den Modulen, Funktionen, und Datentypen beschrieben.
Antworten