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)
时间: 2024-10-02 23:35:39

python考勤分析的相关文章

python日志分析

微秒   毫秒 datetime seek定位指针 从行尾到行首 fd.seek(-2,1)  1  当前位置 fd.tell() fd.seek(-2,2)  2   最后位置 fd.tell() fd.seek(0,0)   0  最前位置 read(1)读一位    read() 全部都读 tac与cat    行首到行尾 reversed   翻转字符串 只读一部分    通过时间判断 200 404  503  十分钟之内   第八列  apache.log 1.首先匹配时间格式, D

Python代码分析工具:PyChecker、Pylint

1 概述 PyChecker是Python代码的静态分析工具,它能够帮助查找Python代码的bug,而且能够对代码的复杂度和格式等提出警告. PyChecker可以工作在多种方式之下.首先,PyChecker会导入所检查文件中包含的模块,检查导入是否正确,同时检查文件中的函数.类和方法等. PyChecker可以检查出来的问题有如下几种: 全局量没有找到,比如没有导入模块 传递给函数.方法.构造器的参数数目错误 传递给内建函数和方法的参数数目错误 字符串格式化信息不匹配 使用不存在的类方法和属

Python性能分析指南(未完成)

英文原文:http://www.huyng.com/posts/python-performance-analysis/ 译文:http://www.oschina.net/translate/python-performance-analysis 虽然你所写的每个Python程序并不总是需要严密的性能分析,但是当这样的问题出现时,如果能知道Python生态系统中的许多种工具,这样总是可以让人安心的. 分析一个程序的性能可以归结为回答4个基本的问题: 1.它运行的有多块? 2.那里是速度的瓶颈?

第五次作业——python效能分析与几个问题(个人作业)

第五次作业--效能分析与几个问题(个人作业) 前言 阅读了大家对于本课程的目标和规划之后,想必很多同学都跃跃欲试,迫不及待想要提高自身实践能力,那么就从第一个个人项目开始吧,题目要求见下. 阅读 阅读<构建之法>第一章至第三章的内容,并在下方作业里体现出阅读后的成果.特别是第2章中的效能分析及个人软件开发流程(PSP). 参考文章: <构建之法>教学笔记--Python中的效能分析与几个问题 四则运算器效能分析 软工第2次作业-四则运算器 题目描述 可以选择以下题目(或者自主选择题

Python大佬分析了15万歌词,告诉你民谣歌手们到底在唱什么

前几天小编写了两篇利用Python采集网易云歌词和采集网易云音乐歌曲文章,相信小伙伴们经过实践之后都能够顺利的采集到自己想要听的歌曲.下面的歌词是小编去年11月份采集的民谣歌词,经过统计,歌词量达到将近15万. 用Python采集的民谣歌词 心血来潮,想利用Python来分析一下民谣歌手们到底在唱些什么鬼~~ 首先运用jieba库进行分词和词频统计分析,得到歌词中的词频统计,部分主要代码如下图所示: 运用jieba库进行分词和词频统计分析 得到的词频后将其导入到Excel表格中,详情如下图: 民

Python性能分析

Python性能分析 https://www.cnblogs.com/lrysjtu/p/5651816.html https://www.cnblogs.com/cbscan/articles/3341231.html 使用ipdb 使用profile import profile def profileTest(): Total =1; for i in range(10): Total=Total*(i+1) print Total return Total if __name__ ==

Python性能分析工具Profile

Python性能分析工具Profile 代码优化的前提是需要了解性能瓶颈在什么地方,程序运行的主要时间是消耗在哪里,对于比较复杂的代码可以借助一些工具来定位,python 内置了丰富的性能分析工具,如 profile,cProfile 与 hotshot 等.其中 Profiler 是 python 自带的一组程序,能够描述程序运行时候的性能,并提供各种统计帮助用户定位程序的性能瓶颈.Python 标准模块提供三种 profilers:cProfile,profile 以及 hotshot. p

Python代码分析工具之dis模块

转自:http://hi.baidu.com/tinyweb/item/923d012e8146d00872863ec0  ,格式调整过. 代码分析不是一个新的话题,代码分析重要性的判断比较主观,不同的人有不同的认识.Python是用C来实现的,所以对于Python的性能或代码质量的评估可以通过dis模块获取到对应的字节码指令来进行评估. Python代码是先被编译为Python字节码后,再由Python虚拟机来执行Python字节码(pyc文件主要就是用于存储字节码指令 的).一般来说一个Py

Python性能分析指南

http://www.admin10000.com/document/2861.html 尽管并非每个你写的Python程序都需要严格的性能分析,但了解一下Python的生态系统中很多优秀的在你需要做性能分析的时候可以使用的工具仍然是一件值得去做的事. 分析一个程序的性能,最终都归结为回答4个基本的问题: 程序运行速度有多快? 运行速度瓶颈在哪儿? 程序使用了多少内存? 内存泄露发生在哪里? 下面,我们将使用一些优秀的工具深入回答这些问题. 使用time工具粗糙定时 首先,我们可以使用快速然而粗