KoKo_ Skrevet 16. april 2015 Del Skrevet 16. april 2015 Hei! Jeg er helt fersk på Python (og linux), så jeg mangler nok en del basiskunnskaper, men kanskje dere kan hjelpe allikevel? Jeg har en Arduino som jeg har satt opp til å logge X-antall sensorer med jevne mellomrom (20 sekunder for øyeblikket) I Raspberry PI har jeg klart å lese av verdiene i python-vinduet, men nå gjenstår det å få dette over i fil, og helst med et timestamp. Dette er det jeg har: ------ Python 2.7.3 (default, Mar 18 2014, 05:13:23) [GCC 4.6.3] on linux2 Type "copyright", "credits" or "license()" for more information. >>> import serial >>> ser=serial.Serial('/dev/ttyACM0',9600) >>> while 1: ser.readline() Dette gir meg denne outputten: 'Sensor;0;23.06\r\n' 'Sensor;1;20.44\r\n' 'Sensor;2;19.06\r\n' 'Sensor;3;18.19\r\n' 'Sensor;4;30.00\r\n' 'Sensor;5;23.31\r\n' 'UtskriftSlutt\r\n' (her venter den i X-antall sekunder, før det kommer mer) 'Sensor;0;23.06\r\n' 'Sensor;1;20.44\r\n' 'Sensor;2;19.00\r\n' 'Sensor;3;18.12\r\n' 'Sensor;4;30.00\r\n' 'Sensor;5;23.31\r\n' 'UtskriftSlutt\r\n' (her venter den i X-antall sekunder, før det kommer mer) 'Senso...osv...osv... Sikkert enkelt, men jeg ønsker at dette skal skrives til fil som ligger et spesifisert sted, og da helst med timestamp før hver linje. Tips? Lenke til kommentar
snippsat Skrevet 16. april 2015 Del Skrevet 16. april 2015 (endret) Sikkert enkelt, men jeg ønsker at dette skal skrives til fil som ligger et spesifisert sted, og da helst med timestamp før hver linje. Tips? Det er flere måter og gjøre dette på. Kan skive ned noe rask,bruker JSON i dette eksemplet. import time import datetime import json data = '''\ 'Sensor;0;23.06\r\n' 'Sensor;1;20.44\r\n' 'Sensor;2;19.06\r\n' 'Sensor;3;18.19\r\n' 'Sensor;4;30.00\r\n'''.replace('\r\n', '') d = {} for line in data.split('\n'): time.sleep(2) # Simulate some delay d[datetime.datetime.utcnow().strftime("%c")] = line with open('data.json', 'wb') as f_out: json.dump(d, f_out) with open('data.json') as f: data = json.load(f) Se på data: >>> data {u'04/16/15 21:14:43': u"'Sensor;0;23.06'", u'04/16/15 21:14:45': u"'Sensor;1;20.44'", u'04/16/15 21:14:47': u"'Sensor;2;19.06'", u'04/16/15 21:14:49': u"'Sensor;3;18.19'", u'04/16/15 21:14:51': u"'Sensor;4;30.00"} >>> data['04/16/15 21:14:45'] u"'Sensor;1;20.44'" >>> print(data['04/16/15 21:14:49']) 'Sensor;3;18.19' Endret 16. april 2015 av snippsat Lenke til kommentar
KoKo_ Skrevet 16. april 2015 Forfatter Del Skrevet 16. april 2015 Hei, og takk for svar! Jeg må innrømme at jeg nok ikke skjønte alt det der. Ser du har skrevet opp litt av eksempel-outputten i koden din, det skjønte jeg ikke hvorfor, siden det den infoen jeg skal logge, ikke "hardkode i koden? (Jeg har sikkert misforstått noe her) Ser ikke helt hvor selve input'en fra Arduinoen kommer inn i koden? Altså, den delen som logger USB-deviceen Heller ikke hvor i koden jeg velger filnavn? Som sagt, er helt ny på dette. Programmert litt C++ og vba på lavt nivå, men ikke python før i dag. Lenke til kommentar
snippsat Skrevet 17. april 2015 Del Skrevet 17. april 2015 (endret) Ser du har skrevet opp litt av eksempel-outputten i koden din, det skjønte jeg ikke hvorfor, siden det den infoen jeg skal logge, ikke "hardkode i koden? Jeg gjorde det bare for og simulere data du får fra serial port. Ser ikke helt hvor selve input'en fra Arduinoen kommer inn i koden? Altså, den delen som logger USB-deviceen Heller ikke hvor i koden jeg velger filnavn? Kan lage en versjon til der jeg forklare litt mer. Forenkler litt og skriver rett til en logg-fil. import time import datetime #simualte data from serial data = '''\ 'Sensor;0;23.06\r\n' 'Sensor;1;20.44\r\n' 'Sensor;2;19.06\r\n' 'Sensor;3;18.19\r\n' 'Sensor;4;30.00\r\n'''.replace('\r\n', '') f_obj = open('log_file','w') #Simulate the while 1 loop for readline in data.split('\n'): time.sleep(2) # Simulate some delay #print to see whats happends print('{} --> {}'.format(datetime.datetime.utcnow().strftime("%c"), readline)) temp = '{} --> {}'.format(datetime.datetime.utcnow().strftime("%c"), readline) f_obj.write('{}\n'.format(temp)) f_obj.close() Resultat i "log_file" : 04/17/15 15:34:34 --> 'Sensor;0;23.06' 04/17/15 15:34:36 --> 'Sensor;1;20.44' 04/17/15 15:34:38 --> 'Sensor;2;19.06' 04/17/15 15:34:40 --> 'Sensor;3;18.19' 04/17/15 15:34:42 --> 'Sensor;4;30.00 Endret 17. april 2015 av snippsat 1 Lenke til kommentar
KoKo_ Skrevet 19. april 2015 Forfatter Del Skrevet 19. april 2015 (endret) Har ikke fått det til enda, får litt noen feilmeldinger, men skal se videre på det i løpet av uka og se om jeg skjønner hvor jeg gjør ting feil. Edit: Takk for hjelpen igjen Endret 19. april 2015 av KoKo_ Lenke til kommentar
process Skrevet 21. april 2015 Del Skrevet 21. april 2015 (endret) Alternativt kan du benytte logging modulen: import logging logging.basicConfig(logging.basicConfig(level=logging.INFO, filename='logfil.txt', format='%(asctime)s %(message)s') logging.info("hello world") Da skal du kunne benytte noe slikt som logging.info(ser.readline()) i løkken din. Endret 21. april 2015 av process 1 Lenke til kommentar
KoKo_ Skrevet 25. april 2015 Forfatter Del Skrevet 25. april 2015 Hei, og takk for hjelpen begge to. Logging-modulen var litt lettere å få til uten syntaks-problemer. Mulig det var noe jeg skrev feil ,eller misforstod. Her er koden som ser ut til å fungere fint for meg: import serial import logging import time ser=serial.Serial('/dev/ttyACM0',9600) logging.basicConfig(level=logging.INFO, filename='Templogg.txt', format='%(asctime)s;%(message)s', datefmt='%d.%m.%Y;%H:%M:%S') while 1: logging.info(ser.readline()) time.sleep(1) Takk for hjelpen Lenke til kommentar
KoKo_ Skrevet 27. april 2015 Forfatter Del Skrevet 27. april 2015 Hei igjen. Jeg har som dere ser "\r\n" på slutten av hver linje, dette skaper litt krøll senere i prosessen når jeg skal importere resultater i excel, får en ekstra tom rad ved import etter hver linje. Ser at Snippsat hadde med en ".replace('\r\n', '')" i koden, men jeg finner ikke ut hvordan jeg får det inn i koden min her. Tips til enkel modifikasjon av koden min over for å fjerne dette? Lenke til kommentar
process Skrevet 27. april 2015 Del Skrevet 27. april 2015 (endret) Hei igjen. Jeg har som dere ser "\r\n" på slutten av hver linje, dette skaper litt krøll senere i prosessen når jeg skal importere resultater i excel, får en ekstra tom rad ved import etter hver linje. Ser at Snippsat hadde med en ".replace('\r\n', '')" i koden, men jeg finner ikke ut hvordan jeg får det inn i koden min her. Tips til enkel modifikasjon av koden min over for å fjerne dette? Jeg er ikke så dreven på python, men det kan virke som at ser.readline() returnerer en string. Forsøk logging.info(ser.readline().replace('\r\n', '')) Ettersom du skal ha det inn i excel finnes det også en python modul XlsxWriter som skriver direkte i excel format. Det er litt mer omstendelig, men det er dette som er så fint med python Endret 27. april 2015 av process Lenke til kommentar
snippsat Skrevet 27. april 2015 Del Skrevet 27. april 2015 (endret) men jeg finner ikke ut hvordan jeg får det inn i koden min her Du bruker strip(),jeg brukte replace() fordi jeg skulle ta alle linjene med en gang. ser.readline().strip() Test: >>> read_line = 'Sensor;0;23.06\r\n' >>> read_line.strip() 'Sensor;0;23.06' Ettersom du skal ha det inn i excel finnes det også en python modul XlsxWriter Python har Pandas som kan gjøre det meste excel kan, og mere til. Det er også lettere og bruke Pandas til og overføre til excel enn XlsWriter se her og her. Endret 27. april 2015 av snippsat 1 Lenke til kommentar
process Skrevet 28. april 2015 Del Skrevet 28. april 2015 men jeg finner ikke ut hvordan jeg får det inn i koden min her Du bruker strip(),jeg brukte replace() fordi jeg skulle ta alle linjene med en gang. ser.readline().strip() Test: >>> read_line = 'Sensor;0;23.06\r\n' >>> read_line.strip() 'Sensor;0;23.06' Ettersom du skal ha det inn i excel finnes det også en python modul XlsxWriter Python har Pandas som kan gjøre det meste excel kan, og mere til. Det er også lettere og bruke Pandas til og overføre til excel enn XlsWriter se her og her. Jepp, det blir ryddigere. Takk for tips om Pandas, det kan godt hende det blir nyttig. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå