python考勤分析

上次的ruby考勤那个, 因为天天发邮件, 人事觉得烦, 刚好现在在折腾Python, 于是用这个重写了...


这个发邮件的, 可以发附件,图片... 记录一下


#!/usr/bin/python

import datetime
import MySQLdb

import smtplib  
from email.mime.multipart import MIMEMultipart  
from email.mime.text import MIMEText  
from email.mime.image import MIMEImage  

csv_str = 'datetime,name,start,over,hour\n'
name = {1:"mei.han", 2:"xing.mei", 3:"you.yao", 6:"zing.ma", 9:"jing.cai"}
csv_file = "/tmp/check_in.csv"

def send_mail(filename=[], picname=[], content_txt='', content_html=''): 
  smtpserver = 'smtp.163.com'  
  username = '[email protected]'  
  password = '123123'  
    
  msg = MIMEMultipart()  
  msg['Subject'] = 'Check_in'  
  msg['From'] = "[email protected]"
  msg['To'] = "[email protected]"
    
# attchment
  if len(filename) > 0:
    for i in filename:
      att = MIMEText(open(i, 'rb').read(), 'base64', 'gf2312')  
      att["Content-Type"] = 'application/octet-stream'  
      att["Content-Disposition"] = 'attachment; filename="%s"' % i.split('/')[-1]
      msg.attach(att)  

# attchment picture
  if len(picname) > 0 and content_html != '':
    for i in range(0,len(picname)):
      #content_html = '<b>Some <i>HTML</i> text</b> and an image.<br><img src="cid:image%s"><br>good!' % i  
      msg_content_html = MIMEText(content_html,'html','gb2312')  
      msg.attach(msg_content_html)  
  
      with open(picname[i], 'rb') as f:
        msgImage = MIMEImage(f.read())  
      
      msgImage.add_header('Content-ID', '<image%s>' % (i + 1))  
      msg.attach(msgImage)
    
# content text    
  if content_txt != '':
    msg_content_txt = MIMEText(content_txt,_subtype='plain',_charset='gb2312') 
    msg.attach(msg_content_txt)

# content html  
  if content_html != '' and len(picname) == 0:
    msg_content_html = MIMEText(content_html,_subtype='html',_charset='gb2312') 
    msg.attach(msg_content_html)
  
  smtp = smtplib.SMTP()  
  smtp.connect('smtp.163.com')  
  smtp.starttls()  #ssl send
  smtp.login(username, password)  
  smtp.sendmail(msg['From'], msg['To'], msg.as_string())  
  smtp.quit()  

def check_kq(kq_time):
  tmp_list = []
  csv_tmp = ''
  work = False
  try:
    conn = MySQLdb.connect(host='192.168.2.2',user='kq',passwd='123123',db='test',port=3306)
    cur = conn.cursor()
  
    for i in name.keys():
      max_time = kq_time + " 23:00:00"
      min_time = kq_time + " 06:00:00"
      cur.execute("select * from kqtime where userid=%s and time>\'%s\' and time<\'%s\'" % (i,min_time,max_time))
      kqtime = cur.fetchall()
  
      for x,y,z in kqtime: #num, time, userid
        tmp_list.append(y)
      
      if len(tmp_list) == 0:
        csv_tmp = csv_tmp + ("%s,%s,,,0" % (kq_time,name[i])) + "\n"
      elif len(tmp_list) == 1:
        if int(tmp_list[0].strftime("%H")) < 12:
          csv_tmp = csv_tmp + ("%s,%s,%s,,0" % (kq_time,name[i],tmp_list[0].strftime("%H:%M:%S"))) + "\n"
        else:
          csv_tmp = csv_tmp + ("%s,%s,,%s,0" % (kq_time,name[i],tmp_list[0].strftime("%H:%M:%S"))) + "\n"
        work = True
      else:
        hour_str = str(max(tmp_list) - min(tmp_list))
        hour = int(hour_str.split(':')[0])
        sec = int(hour_str.split(':')[1])
        if hour > 3:
          hour -= 1
          
        if sec < 15:
          hour += 0.0 
        elif 15 <= sec < 45:
          hour += 0.5
        elif sec >= 45:
          hour += 1.0

        work = True
        csv_tmp = csv_tmp + ("%s,%s,%s,%s,%s" % (kq_time,name[i],min(tmp_list).strftime("%H:%M:%S"),max(tmp_list).strftime("%H:%M:%S"),hour)) + "\n"
  
      tmp_list = []
  
    cur.close()
    conn.close()
  except:
    pass
  if work:
    return csv_tmp
  else:
    return ''

for i in range(1,8)[::-1]: #一周分析一次
  day_kq = check_kq((datetime.datetime.now() - datetime.timedelta(days=i)).strftime("%Y-%m-%d"))
  if day_kq != '':
    csv_str = csv_str + check_kq((datetime.datetime.now() - datetime.timedelta(days=i)).strftime("%Y-%m-%d")) + "\n"

with open(csv_file, 'w') as f:
  f.write(csv_str)

send_mail(filename=[csv_file], content_txt="Check_In")
os.remove(csv_file)


你可能感兴趣的:(mysql,python,mail,attchment)