我写了一个程序,应该在每次运行程序时将数据写入单独的文件。这是第一次,但只要我再次运行该程序,它会创建2个条目,第三个创建4个条目等等。我根本找不到这个错误。日志文件创建了太多的条目,但我不知道为什么
这是代码的一部分,应该使在新文件中的条目:
import datetime
import logging
logging.basicConfig(filename='loghistory.log', filemode='w', level=logging.DEBUG)
logger = logging.getLogger('loghistory.log')
ch = logging.FileHandler('loghistory.log',mode='w')
# to empty exisiting file: logging.FileHandler('loghistory.log', mode ='w')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s',datefmt='%m/%d/%Y %I:%M:%S %p')
ch.setFormatter(formatter)
logger.addHandler(ch)
logger.setLevel(logging.DEBUG)
if q2==0 and q1==0:
logger.debug('No airplanes within 5 km')
else:
if q2 ==0 and q1>0:
logger.debug('At least 1 airplane within 5 km')
else:
if q2>0:
logger.debug('At least 1 airplane within 2 km')
这是它目前的样子:
03/07/2017 09:06:21 AM - loghistory.log - DEBUG - At least 1 airplane within 2 km
03/07/2017 09:06:21 AM - DEBUG:loghistory.log:At least 1 airplane within 2 km
03/07/2017 09:06:21 AM - loghistory.log - DEBUG - At least 1 airplane within 2 km
,但它应该是这样的:
03/07/2017 09:06:21 AM - At least 1 airplane within 2 km
03/07/2017 09:06:22 AM - At least 1 airplane within 2 km
03/07/2017 09:06:23 AM - At least 1 airplane within 2 km
每秒(或2秒)一个新的条目。
这里是整个代码:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import pandas as pd
import math
import numpy as np
import winsound
from Tkinter import *
#----------------------------------------------------------------------------------
# import and reduce data and change it to distances
data = np.genfromtxt("c:/kenny/daten/daten1s55.py",dtype = np.str,delimiter=",")
x=data
y11=[]
z=[]
w1=[]
w2=[]
w3=[]
i=0
for i in range(len(x)):
if (len(x[i][14]) > 0):
y11.append((math.acos(math.sin(math.radians(float(x[i][14])))*math.sin(math.radians(54.102427))+math.cos(math.radians(54.102427))*math.cos(math.radians(float(x[i][14])))*math.cos(math.radians(11.735042-float(x[i][15])))))*6378.388)
z.append(x[i][4])
w1.append(x[i][14])
w2.append(x[i][15])
w3.append(x[i][11])
v=np.column_stack((z,y11,w1,w2,w3))
M = pd.DataFrame(v)
"""M.columns=['Flightcode','Distance','Lat','Long','Height']"""
M[1] = M[1].astype(float)
M1=M.sort([0,1])
M2=M1.reset_index(drop=True)
v1=[]
v2=[]
v3=[]
v4=[]
v5=[]
ii=0
v1.append(M2[0][0])
v2.append(M2[1][0])
v3.append(M2[2][0])
v4.append(M2[3][0])
v5.append(M2[4][0])
for ii in range(len(z)):
if M2[0][ii] <> v1[-1]:
v1.append(M2[0][ii])
v2.append(M2[1][ii])
v3.append(M2[2][ii])
v4.append(M2[3][ii])
v5.append(M2[4][ii])
Data_gekuertzt1=np.column_stack((v1,v2,v3,v4,v5))
Data_gekuertzt= pd.DataFrame(Data_gekuertzt1)
#----------------------------------------------------------------------------------
# alert when airplane closer than 2 or 5 km
q1=0
q2=3
for k in range(len(Data_gekuertzt)):
if v2[k] <=5 and v2[k]>2:
q1+=1
else:
if v2[k]<=2:
q2+=1
if q2 > 0:
winsound.Beep(600,2000)
root = Tk()
root.geometry('{}x{}'.format(520, 300))
w = Label(root, text= 'Airplane within 2 km radius',fg = "red",font = "Helvetica 30 bold italic")
w.pack()
root.mainloop()
if q1 >0:
winsound.Beep(300,2000)
#---------------------------------------------------------------------------------------
#create a logfile
import datetime
import logging
logger = logging.getLogger('loghistory.log')
ch = logging.FileHandler('loghistory.log')
# to empty exisiting file: logging.FileHandler('loghistory.log', mode ='w')
formatter = logging.Formatter('%(asctime)s - %(message)s',datefmt='%m/%d/%Y %I:%M:%S %p')
ch.setFormatter(formatter)
logger.addHandler(ch)
logger.setLevel(logging.DEBUG)
if q2==0 and q1==0:
logger.debug('No airplanes within 5 km')
else:
if q2 ==0 and q1>0:
logger.debug('At least 1 airplane within 5 km')
else:
if q2>0:
logger.debug('At least 1 airplane within 2 km')
这就是FileHandler的工作原理。它将日志消息附加到文件中。你期望它做什么?或者说,你想实现什么目标? – nir0s
@ nir0s我eddited我的问题。我想实现的是程序每隔一秒钟或2秒记录一条消息,但只记录一条消息,当我多次运行该程序时,它会多次添加相同的消息而不是一次。 – Kenny