Найти - Пользователи
Полная версия: Прошу помощи. Сохраниение в файл изменяющейся переменной.
Начало » Центр помощи » Прошу помощи. Сохраниение в файл изменяющейся переменной.
1
Roman_st
Привет, уважаемые фуромчане. Прошу Вашей помощи в решении одной задачи.
Задача: Существует некоторая, изменяющаяся втечении времени, переменная “a”. Нужна программа которая будет записывать значения данной переменной в файл( в файл с именем даты дня например : 27.08.14.txt , т.е того дня когда ведется запись) в столбик с интервалом 0,1 секунды и запись должна длиться в течении суток. Затем при наступлении 00:00 часов, программа создает новый файл с именем “Дата дня” в который будет продолжена запись данной переменной. если возможно еще рядом со значением переменной в файл записать актуальное время когда была сделана запись.Например :
13:01:100 “значение переменной а”
13:01:200 “Значение переменной a” и т.д

Я не программист, и с языками программирования никогда раньше не имел дело. Прошу очень Вашей помощи. Попробовал написать но не функционирует что то скрипт:

import time
ts = time.time()
import datetime
st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d')

#открыть файл
s= open(“D:\Kanal1” + str(st)+ “.txt”, “w”)
a=d.getAIN(0)# аналоговый сигнал прибора Labljack. Для тестироания в Python можно заменить.
i=1
#цикл
for i in range (2):

v=input (“a” )
b=str(v) #
print b #
#сохраниение в файл
s.write(str (i) + ‘: ’ + b + ‘\n’)
i=i+1
time.sleep(0.1) #0,1 сек пауза


s.close()
infoing
Может так?
s = open(“D:\Kanal1\” + str(st)+ “.txt”, “w”)
Roman_st
infoing
Может так?s = open(“D:\Kanal1\” + str(st)+ “.txt”, “w”)

думаю что там все в порядке. скрипт еще не дописан до конца. много чего не хватает
Art-master
Первый момент который я замечу. Зачем вы используете запись в файл если есть гораздо более приятная вещь как БД. В python есть в строенная, не надо забывать про это, SQLite. Не проще ли Вам будет переписать скрипт через работу с БД и есть ли такая возможность? (Может у вас там другой скрипт умеет читать только файлы текстовые и с БД он не умеет работать.)

Если есть возможность работы с БД, наверное, стоит попробовать что-то следующее.
# coding: utf-8
import sqlite3, datetime
import time as tm
conn = sqlite3.connect("D:\\Kanal1\\database_of_dates.db")
c = conn.cursor()
try: c.execute("CREATE TABLE times (date VARCHAR, time VARCHAR, a_value VARCHAR);")
except: pass
while True: # чтобы закончить данный цикл записи данных нажмите Ctrl-C
	# инициализация вашей переменной
	a = d.getAIN(0) # ваша функция (или метод объекта)
	# опрделение времени
	d = datetime.datetime.today()
	date = d.strftime("%d-%m-%y")
	time = d.strftime("%H:%M:%S")
	# запись данных
	c.execute("INSERT INTO times VALUES('%s', '%s', '%s')" % (date, time, a))
	# сохранение изменений
	conn.commit()
	tm.sleep(0.1)
conn.close()

Теперь тот скрипт нужный для просмотра данных
import sqlite3
conn = sqlite3.connect("D:\\Kanal1\\database_of_dates.db")
c = conn.cursor()
c.execute("SELECT date FROM times")
tmp = set()
for i in c.fetchall():
	tmp.add(i[0])
for i in tmp:
	c.execute("SELECT time FROM times WHERE date='%s'" % (i,))
	print i
	for j in c.fetchall():
		print "\t" + j[0]
raw_input()
conn.close()
Art-master
Но если Вы так придирчивы и Вам необходимо записывать все в наглядный текстовый файл, то давайте так, потому что Ваш пример кода “немного некорректный”:
import os, datetime
import time as tm
while True: # чтобы закончить запись - Ctrl-C
	a = d.getAIN(0) # ваша функция (или метод объекта) 
	d = datetime.datetime.today()
	# определение времени
	date = d.strftime("%d-%m-%y")
	time = d.strftime("%H-%M-%S")
	# запись
	if date in os.listdir("D:\\Kanal1\\"):
		f = open("D:\\Kanal1\\" + date + ".txt", "a")
		f.write(time + ":" + a + "\n")
	else:
		f = open("D:\\Kanal1\\" + date + ".txt", "w")
		f.write(time + ":" + a + "\n")
	f.close()
	tm.sleep(0.1)

P.S. Если есть какие-то вопросы - пишите.
Roman_st
Art-master
Но если Вы так придирчивы и Вам необходимо записывать все в наглядный текстовый файл, то давайте так, потому что Ваш пример кода “немного некорректный”:
Спасибо огромнейшее и человеческое))

только при выполнение программы сохранения в файл выдает :
Traceback (most recent call last):
File “CUsers/Admin/Desktop/gfd”, line 10, in <module>
if date in os.listdir(“D:\\Kanal1\\”):
WindowsError: ??????? ?? ??????? ????? ????????? ????: ‘D:\\Kanal1\\*.*’
Art-master
Проверьте, точно ли у вас такая папка есть на диске. Просто на данной строке (которая указана в traceback) находится код, который проверяет файл с датой в если он есть, то он запишет уже в существующий файл, если нет, то откроет новый. Так вот он проверяет наличие этого файла именно в папке D:\Kanal1. Если ее нет, то точно вылетит ошибка.

И еще: мне просто интересно, что это за скрипт и зачем он, если не секрет?
Roman_st
Art-master
Проверьте, точно ли у вас такая папка есть на диске. Просто на данной строке (которая указана в traceback) находится код, который проверяет файл с датой в если он есть, то он запишет уже в существующий файл, если нет, то откроет новый. Так вот он проверяет наличие этого файла именно в папке D:\Kanal1. Если ее нет, то точно вылетит ошибка.И еще: мне просто интересно, что это за скрипт и зачем он, если не секрет?
Не секрет. есть такой прибор Labjack U6. Данный прибор считывает аналоговый сигнал например с термопары , или термометра. Вот нужно сохранить эти значание в файл.


Traceback (most recent call last):
File “C:\Users\Admin\Desktop\gfd”, line 15, in <module>
f.write(time + “:” + a + “\n”)
TypeError: cannot concatenate ‘str’ and ‘int’ objects

Новая ошибка…
Art-master
А, у вас там число… Я просто не знал, что это показания температуры. Вот.
import os, datetime
import time as tm
while True: # чтобы закончить запись - Ctrl-C
	a = str(d.getAIN(0)) # ваша функция (или метод объекта) 
	d = datetime.datetime.today()
	# определение времени
	date = d.strftime("%d-%m-%y")
	time = d.strftime("%H-%M-%S")
	# запись
	if date in os.listdir("D:\\Kanal1\\"):
		f = open("D:\\Kanal1\\" + date + ".txt", "a")
		f.write(time + ":" + a + "\n")
	else:
		f = open("D:\\Kanal1\\" + date + ".txt", "w")
		f.write(time + ":" + a + "\n")
	f.close()
	tm.sleep(0.1)
doza_and
import logging
import time
import logging.handlers
ch = logging.handlers.TimedRotatingFileHandler(filename='example.log',when='S',interval=3)
fmt = logging.Formatter('%(asctime)s %(message)s')
ch.setFormatter(fmt)
lg=logging.getLogger()
lg.addHandler(ch)
lg.setLevel(logging.DEBUG)
for i in range(10000):
    logging.info('data')
    time.sleep(0.1)
см например http://john16blog.blogspot.ru/2011/07/python-logging.html
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB