xlwt sendmail linux/windows风格回车 crontab 软连接 python时间格式化 2016.08.25回顾

70 篇文章 0 订阅
19 篇文章 0 订阅

昨天主要就是做keyco的需求,一天之中分三个时间点,自动发送邮件,邮件的附件是excel,所以我首先需要学习一个python中写入excel的模块,我使用的是一个叫xlwt的模块,excel的数据来自于SQL查询,最后取出结果,撰写正确的SQL查询语句,MySQLdb,fetchall()方法取到的是一个二元的tuple,表达了一个二维的结果表,然后将结果集写入excel,再以邮件附件的形式把excel发送给相关人员,实现自动化,就是用linux的crontab实现定时任务,在合适的时间发送邮件,整个思路还是很简单清晰!但是这其中也遇到大大小小各种问题!把学到的新知识点总结如下:

1、xlwt的使用,怎么把result = cur.fetchall()的内容全部写到excel中

book = xlwt.Workbook(encoding='utf-8',style_compression=0)
sheet = book.add_sheet('sheet1',cell_overwrite_ok=True)
#写第一行表头
for j in range(len(sheet_title)):
    sheet.write(0,j,sheet_title[j])
#从第二行开始把result写到excel中
for i in range(len(result)):
    for j in range(len(result[i])):
        sheet.write(i+1,j,result[i][j])
sheet_title,是常量tuple,先设置好,result是SQL查询的结果集,写完了过后,不要忘记保存xls

book.save(xls_name)
2、发邮件用的是自己以前的一个demo,本来是应该很快完成的一个环节,然而我又发现了一个新的要注意的地方,如果邮件发给多人msg['To']是一个字符串,这个字符串每个收件人之间用逗号分隔,形如:

msg['To'] = 'huzl@xxx.cn,lindsay.qin@xxx.cn,keyco@xxx.cn'
然后后面sendmail的时候,第二个参数要是一个list

s.sendmail(msg['From'],msg['To'].split(','),msg.as_string())
把msg['To']的字符串分隔成list就可以了,至于类实现dict功能msg['To']参考 python类中实现dict的功能,然后还重温了一点,可以这样去定义dict里面键值

k = {}
k['test'] = 123
但是不可以直接(不定义k的情况)

k['a'] = 456
但是php这种是可以的,在之前不定义关联数组,之后直接可以定义其中的键!

3、以上解决了发邮件的功能后,就是脚本在linux上运行的问题了,一种就是在脚本第一行指定解释器的位置,python有两种方法指定解释器,#!/usr/bin/env python这个是在环境变量$PATH去搜索python,另一种是#!/usr/local/python27/bin/python,这种是指定解释器的绝对路径,但是我这样写后发现报告一些很诡异的错误,首先是脚本没有执行权限,要给脚本加上执行权限chmod +x abc.py,然后./abc.py报错,对于第一种写法#!/usr/bin/env python,报错是没有那个文件或目录,然后改成了绝对路径,报错变成
了/usr/bin/python^M: bad interpreter: No such file,这个我查询了一下因为是windows开发的脚本,末尾回车风格不同,用notepad++ -> edit -> EOL conversion转成unix/osx format,然后放到linux上两种解释器的写法都不会报错了!真是奇葩!

4、接下来要解决的就是定时任务,定时任务用到的是一个linux的工具叫做crontab,我这个系统并不自带,安装直接采用yum install crontab,发现没有这个包名,用yum search crontab,查找到一个叫crontabs的工具,yum install crontabs安装成功,这个安装过过后可以在/etc/crontab中设置计划任务,里面有示例,形如

0  8  *  *  * root python /root/judgement_8.py >> /root/log/8.log 2>&1
这就是每天早上8点运行一次脚本,标准错误输出到标准输出,标准输出重定向到/root/log/8.log,写这个日志前必须建立好/root/log这个dir

mkdir log
这里还需要强调>>和>的区别,>>类似于open中的a模式,存在文件可以追加,而>类似于w,如果存在就覆盖重开头开始写。crontab -e可以设置当前用户的定时任务,crontab -l查看当前的定时任务,crontab的默认日志位置我没找到,后来放弃了。crontab安装后,服务并没有自动启动,要手动开启服务,  linux查看、开启、停止服务,service crond status,查看crontab的状态,发现关闭,开启service crond start

5、linux建立软连接,软连接机制就类似于windows的快捷方式的机制,创建的时候使用命令ln -s 目标文件 连接名字(快捷方式名字),开始目标文件和连接名字弄反了,始终没成功!

6、昨天还有一点用日期生成文件名,import time模块,time.strftime('%Y%m%d%H%M%S'),把日期转换成了str格式,可以格式化输出







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值