Python Forum
write data each second into file with timestamp - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: write data each second into file with timestamp (/thread-6637.html)



write data each second into file with timestamp - br0ken - Dec-01-2017



I want to create a file with each second a logging of the data with a timestamp. instead of always overwriting it like the script underneath does. Perhaps in csv ?

But how to import the data that this script is reading into such a file ? I can not find exactly what I'm looking for Blush (wrong terms for searching perhaps)

Thanks for any kind of help

#!/usr/bin/env python3
# coding=utf-8
"""
 ...
"""
import sys, time
from daemon3x import daemon3x
from configparser import SafeConfigParser
import smaem

#read configuration
parser = SafeConfigParser()
parser.read('/etc/smaemd/config')

smaemserials=parser.get('SMA-EM', 'serials')
serials=smaemserials.split(' ')
smavalues=parser.get('SMA-EM', 'values')
values=smavalues.split(' ')
pidfile=parser.get('DAEMON', 'pidfile')

class MyDaemon(daemon3x):
	def run(self):
		emparts = {}
		while True:
			emparts=smaem.readem()
			for serial in serials:
				#print(serial)
				#print(emparts['serial'])
				if serial==format(emparts['serial']):
					#print("match")
					for value in values:
						file = open("/run/shm/em-"+format(serial)+"-"+format(value), "w")
						file.write('%.4f' % emparts[value])
						file.close()

if __name__ == "__main__":
	daemon = MyDaemon(pidfile)
	if len(sys.argv) == 2:
		if 'start' == sys.argv[1]:
			daemon.start()
		elif 'stop' == sys.argv[1]:
			daemon.stop()
		elif 'restart' == sys.argv[1]:
			daemon.restart()
		else:
			print ("Unknown command")
			sys.exit(2)
		sys.exit(0)
	else:
		print ("usage: %s start|stop|restart" % sys.argv[0])
		print (pidfile)
		sys.exit(2)



RE: write data each second into file with timestamp - sparkz_alot - Dec-01-2017

Once you initially create the file with the 'w' option, you would then access it for subsequent writing with the 'a' (append) option. See Input and Output (scroll down to section 7.2)


RE: write data each second into file with timestamp - Larz60+ - Dec-01-2017

FYI - 'a' will create the file if it doesn't already exist.
so you don't need 'w' at all.


RE: write data each second into file with timestamp - br0ken - Dec-03-2017

Thanks guys.

Now for the timestamp
First I do the following :
from datetime import datetime

Now how do I merge datetime.now() into the output file? I tried

file.write('%.4f'+datetime.now() % emparts[value])
But I'm not seeing any timestamp anywhere? Tried multiple formats but I never found any timestamp. I can not use it in the write command?


RE: write data each second into file with timestamp - Larz60+ - Dec-04-2017

Here's a method that I use for saving with time stamp:
    def save_session(self):
        current_time = f'{time.ctime()}'
        current_time = current_time.replace(' ', '-')
        current_time = current_time.replace(':', '_')
        fname = f'debug-info-{current_time}.json'
        sessionfile = self.paths.datapath / fname
        with sessionfile.open('w') as f:
            json.dump(self.summary_info, f)
This creates file names like: debug-info-Fri-Dec--1-05_44_36-2017.json


RE: write data each second into file with timestamp - br0ken - Dec-04-2017

Hmm thanks but I was speaking of the content of the file

Si it would hold the data with each record having its timestamp. Sorry if I didn't explain it all to well


RE: write data each second into file with timestamp - Larz60+ - Dec-04-2017

You explained it well enough.
I didn't read it well enough.


RE: write data each second into file with timestamp - br0ken - Dec-05-2017

I've got an idea.

Looking at the openingspost script, you see it reads data from smaem(.py) if I'm not mistaking.

What if i define a character X as in
character X=time.strftime("%Y-%m-%d %H:%M:%S")
so that when i put some reference in the smaem file to that command, I can use it in the output to have it show the output i want ? like in date + data it reads out ?

as in:
file.write('%characterX' '%.4f' "\n" % emparts[value] % emparts[value])


I hope you understand what I mean, I looked into defining into python (documentation), but I think i got the terminology wrong ?


RE: write data each second into file with timestamp - br0ken - Dec-06-2017

I have tried the following without success:

file.write('{%Y-%m-%d %H:%M:%S}'.format(datetime.datetime.now())+'%.4f' "\n" % emparts[value])
I'm not getting any error though, it's just writing 1 value away in a file, but the file itsself is blank