Zapis danych w innej formie do pliku, zamiast wyświetlania go w konsoli

0

Niestety moja wiedza na temat Pythona jest praktycznie żadna. Ale mam pewien czujnik podłączony przez UART do Maliny. Poniżej kod programu, wizięty jako "gotowiec" z Internetu:

import serial
import time
import sys
import json
import datetime
import binascii

class pmsA003():
    def __init__(self, dev):
        self.serial = serial.Serial(dev, baudrate=9600, timeout=3)
    def __exit__(self, exc_type, exc_value, traceback):
        self.serial.close()


    def setIdel(self):
        idelcmd = b'\x42\x4d\xe4\x00\x00\x01\x73'
        ary = bytearray(idelcmd)
        self.serial.write(ary)

    def setNormal(self):
        normalcmd = b'\x42\x4d\xe4\x00\x01\x01\x74'
        ary = bytearray(normalcmd)
        self.serial.write(ary)

    def vertify_data(self):
        if not self.data:
            return False
        return True


    def read_data(self):
        while True:
            b = self.serial.read(1)
            if b == b'\x42':
                data = self.serial.read(31)
                if data[0] == b'\x4d':
                    self.data = bytearray(b'\x42' + data)
                    if self.vertify_data():
                        return self._PMdata()

    def _PMdata(self):
        d = {}
#        d['time'] = datetime.datetime.now()
        d['apm10'] = self.data[4] * 256 + self.data[5]
        d['apm25'] = self.data[6] * 256 + self.data[7]
        d['apm100'] = self.data[8] * 256 + self.data[9]
        return d

if __name__ == '__main__':
    print "starting..."
   # con = pmsA003('/dev/ttyS0')
    con = pmsA003('/dev/ttyAMA0')
    d = con.read_data()
    print(d)

W wyniku działania programu otrzymuję na konsoli następujący rezultat:

starting...
{'apm10': 202, 'apm100': 373, 'apm25': 323}

Licząc na pomoc Kolegów, chciałbym aby mi ktoś podpowiedział jak mam zmienić w/w kod tak aby po pierwsze, wynik był zapisywany do pliku a nie na konsole i żeby miał postać:

starting...
, wartość_apm_a10,wartość_apm25, wartość_apm_100

Czyli postać zbiżoną do pliku CSV, w kolejności jak wyszczególniłem powyżej no i bez nawiasów. Bardzo proszę o pomoc!
Z góry dziękuję...

0

Sprobuj Przekierowac wyjscie do pliku:
python program > file.txt
A co do format, Zmieniaj funkcje read_data

0

Wolałbym wprost pisać do pliku a co do funkcji read_data to próbowałem ale jakoś mi nie wyszło. Cóż, jak pisałem moja wiedza na temat Pythona jest niewielka. Dopiero się uczę.

0

Jak nie Chcesz przekierowywac, to serializacja: https://docs.python.org/2/library/pickle.html#module-pickle , lub jakaś baza danych. A co do wydruku, to to co Chcesz nie przypomina wydruku z programu.

0

Ostatecznie znalazłem rozwiązanie, wydaje się dosyć proste:

if __name__ == '__main__':
        con = pmsA003('/dev/ttyAMA0')
        # con = pmsA003('/dev/ttyS0')
        while True:
                print "starting..."
                d = con.read_data()
                l= list(d.values())
                lk= list(d.keys())
                print("%s %s %s" % (lk[0],lk[2],lk[1]))
                print(",%s,%s,%s" % (l[0],l[2],l[1]))
                with open('/home/pi/ramdisk/PMA003', 'a') as f:
                        f.write(",%s,%s,%s\n" % (l[0],l[2],l[1]))
                sleep(2.5)

W tym przypadku pomiary wykonywane są co 2,5 sek i wyświetlane na konsoli (ale tylko w celach testowych) oraz zapisywane do pliku jako csv w kolejności o jaką mi chodziło.

1 użytkowników online, w tym zalogowanych: 0, gości: 1