Python操作Excel, 开发和调用接口,发送邮件
接口开发:
import flask
import tools
import json,redis
import random server = flask.Flask(__name__)
#新建一个服务,把当前这个python文件当做一个服务 ip = '118.24.3.40'
password='HK139bc&*'
r = redis.Redis(host=ip,password=password,port=6379,db=10,
decode_responses=True)#连接redis #登录接口
@server.route('/login',methods=['get'])
def hello():
uname = flask.request.values.get('username')
pd = flask.request.values.get('passwd')
# sql = 'select * from app_myuser where username="%s"'%uname
# res = tools.my_db(sql)
key='nhy:%s'%uname
res = r.get(key)
if res:
res = json.loads(res)
if tools.my_md5(pd) == res.get('passwd'):
res = {"code":0,"msg":"登录成功!"}
else:
res = {"code":1,"msg":"密码错误!"}
else:
res = {'code':2,"msg":"用户不存在"}
return json.dumps(res,ensure_ascii=False,indent=4) #注册接口
@server.route('/reg',methods=['post'])
def reg():
uname = flask.request.values.get('username')
pd = flask.request.values.get('passwd')
cpd = flask.request.values.get('cpwd')
key='nhy:%s'%uname
res = r.get(key)
if res:
res = {'code': 2, "msg": "用户已存在"}
else:
md5_password = tools.my_md5(pd)
res = {'id':random.randint(100,9999),'username':uname,'passwd':md5_password,'is_admin':1}
r.set('nhy:%s'%uname,json.dumps(res))#
res = {"code":0,"msg":"注册成功!"}
return json.dumps(res,ensure_ascii=False,indent=4) #查询信息接口
@server.route('/api/stu')
def get_stu():
username = flask.request.values.get('name')#默认get不到的话,返回的值就是None
age = flask.request.values.get('age')
if username and age:
sql = "select * from app_student where name='%s' and age='%s'" % (username, age)
elif not username and age:
sql = "select * from app_student where age='%s'" % age
elif username and not age:
sql = "select * from app_student where name='%s'" % username
else:
sql = "select * from app_student"
res = tools.my_db2(sql)
return json.dumps(res,ensure_ascii=False,indent=4) server.run(host='0.0.0.0',port=8999,debug=True)
#ip:8000/login
#127.0.0.1
牛刀小试:
1. 传入一个数据库中的表名,然后把表里的数据导出到excel里面
写excel xlwt
连接数据库 pymysql
思路:
1、连接上数据库,写好 sql ='select * from %s;'%table_name
2、获取到数据 [[id name passwd is_admin] [1,nhy,xdfsdfsd,1],[2,nhy2,xdfsdfsd,1] ]
3、循环写入excel
4、写表头 hhh
import pymysql,xlwt
conn = pymysql.connect(host='118.24.3.40',user='jxz',password='',db='jxz')
cur = conn.cursor()
table_name = input('请输入你要导出的表名:').strip()
cur.execute('select * from %s;'%table_name)
res = list(cur.fetchall())
fields = [ field[0] for field in cur.description ]
# cur.description获取到表结构
res.insert(0,fields)
book = xlwt.Workbook()
sheet = book.add_sheet('sheet1')
for index,value in enumerate(res):
for index2,v2 in enumerate(value):
sheet.write(index,index2,v2)
book.save('%s.xls'%table_name)
cur.close()
conn.close()
2. 获取到数据库里面的数据
{'username':'lyl','password':xxx,'id':111,'addr':'xxx'}
然后存到redis里面
set(lyl,{'username':'lyl','password':xxx,'id':111,'addr':'xxx'})
get(key)
import pymysql,redis,json
conn = pymysql.connect(host='118.24.3.40',user='jxz',password='',db='jxz')
cur = conn.cursor(pymysql.cursors.DictCursor)
cur.execute('select * from app_myuser;')
data = cur.fetchall()
cur.close()
conn.close()
ip = '118.24.3.40'
password='HK139bc&*'
r = redis.Redis(host=ip,password=password,port=6379,db=10,
decode_responses=True)#连接redis
for d in data:
# {'username':'lyl','password':xxx,'id':111,'addr':'xxx'}
key = 'nhy:%s'%d.get("username")
r.set(key,json.dumps(d))
fw = open('a.txt','w',encoding='utf-8')
fw.write('时代峰峻圣诞节疯狂楼上的房间考虑到双方就上课了的房间开连锁店是的范德萨')
fw = open('b.txt','w',encoding='gbk')
fw.write('时代峰峻圣诞节疯狂楼上的房间考虑到双方就上课了的房间开连锁店是的范德萨')
import chardet
f= open('b.txt','rb')
res = f.read()
print(chardet.detect(res))
print(res.decode('gbk'))
python utf-8 gbk GB2312字符集
1121 牛
发送邮件:需要安装,pip install yagmail
import yagmail
username='uitestp4p@163.com'
password='houyafan123'#生成授权码,qq、163、126都是授权码 mail_server = 'smtp.163.com'
# mail_server = 'smtp.qq.com'
# mail_server = 'smtp.126.com' m = yagmail.SMTP(user=username,password=password,host=mail_server)
# smtp_ssl=True,如果邮箱使用了安全协议,就需要加这个
#qq邮箱就是使用了安全协议 to = ['1137944722@qq.com','wangmei416516@163.com','511402865@qq.com']
cc = ['61378317@qq.com','1196842722@qq.com','1365834704@qq.com'] m.send(to=to,cc=cc,subject='今天吃了吗',
contents='今天吃鱼肉了吗,吃饱没',
attachments=r'tools.py')
发送网络请求:
1. 用标准库:
from urllib.request import urlopen #python自带的,不好用,只需了解。urllib可以发送网络请求,urlopen可以发送接口请求
from urllib.parse import urlencode #用于post接口请求,urlencode可以把json字符串转化成k=v形式 #评语:这个模块要求类型,二进制换来换去,很麻烦。 #功能:get url request
url='http://127.0.0.1:8999/api/login?username=testuser1&passwd=111111'
res = urlopen(url) #发送接口请求
print(res.read().decode()) #read获取请求返回内容,但返回二进制数据,所以再decode一下。 #功能:post url request
url='http://127.0.0.1:8999/api/login'
data = {'username':'testuser1','passwd':''}
s = urlencode(data) #把字典变成k=v形式,username=testuser1,passwd=111111
#注:‘username=testuser1,passwd=111111’,是个字符串,encode()后,变为b'username=testuser1,passwd=111111'
res = urlopen(url,s.encode()) #post请求,第二个参数要求是二进制类型,所以再encode一下
print(res.read().decode())
2. pip install requests
import requests
import random
url='http://127.0.0.1:8999/api/upload'
data = {'username':'testuser1','passwd':''}
r = requests.get(url,params=data) #发get请求
r = requests.post(url,data=data) #发post请求 data = {
"session_id":"6ab8785039dcf50fb11c53acc1db7648",
"name":"zhouyongbo%s"%random.randint(1,99),
"phone":"111211345%02d"%random.randint(1,99),
"grade":"天秤座"
} r = requests.post(url,json=data) #入参是json类型的 #上传文件的
r = requests.post(url,
data={'session_id':'6ab8785039dcf50fb11c53acc1db7648'},
files={'file_name':open('account.xls','rb') }
) # 添加header
requests.get(url,headers={'cookie':'pt2gguin=o0511402865; RK=JQZpwBp1by; ptcz=6c30e26a9ed6be93d3de9e4c4aca3e55650cf99fcffa64729bd1d58a5fb209d9; pgv_pvi=779236352; pgv_pvid=6970909788; qb_qua=; qb_guid=818de686e29d412fa4ee9e99905ea166; Q-H5-GUID=818de686e29d412fa4ee9e99905ea166; NetType=; pgv_si=s4499960832; FTN5K=0138ca95; pgv_info=ssid=s4269564370; luin=o0511402865; uin=o0511402865; lskey=00010000efc2701412d3429029ac9366e4ba98f0e978e0ae4a9c684101a7b22df0695f534bc242c8d4ff386d; skey=@0sHtvhTsD; ptisp=cnc; p_uin=o0511402865; pt4_token=wGU2YAaM0uu7LbcNjuDcLN-TPrEy7AZw4gcL5TEcKxw_; p_skey=1zg7yvF5wr6l43mfr-BvNHxuVDtybKpR5RbCrgC8weQ_'}) requests.get(url,cookies={'pt2ggui':'o0511402865','RK':'JQZpwBp1by'})
print(r.text) #结果返回的就是字符串
print(r.json()) #结果返回的就是字典,必须返回的是json,才能转成字典 #下载文件
url='https://q4.qlogo.cn/g?b=qq&nk=1834364415&s=140'
url='https://qiniuuwmp3.changba.com/1127063572.mp4'
r = requests.get(url)
#返回的就是二进制的
r.cookies #返回cookie
r.status_code #返回的状态码200
r.content #可以返回图片、音乐等 f = open('sdfsdf.mp4','wb')
f.write(r.content)
f.close()
接口返回值处理:
- json_dic=res.json() #返回为json格式,直接转成字典
- str=res.text #返回为字符串
- file_content=res.content #二进制,下载图片、文件时用,可以直接新建文件再保存内容:with open('a.jpg','wb')as f: f.write(r.content)
- r.cookies #请求返回的cookie
- r.status_code #状态码
写日志: pip install nnlog
import nnlog
nnlog.Logger.words='哈哈哈哈'
log = nnlog.Logger('book_server.log','warn',when='S',backCount=5) #默认debug级别,自动清理日志,5条就删除
# debug 打印一些调试信息,非常多
# info 打印走到哪儿了
# warning
# error
#这一个语句,可以放在需要的地方,比如登录是,将谁在登录写入日志
log.debug('xxx值是什么')
log.info('调用了什么xxx')
log.warning('xx警告!')
log.error('xxx出错!')
代码文件:
tools.py
import time
import os
def timestampToStr(timestamp=None,format='%Y-%m-%d %H:%M:%S'):
#时间戳转格式化好的时间
if timestamp:
time1 = time.localtime(timestamp)
res = time.strftime(format, time1)
else:
res = time.strftime(format)
return res
#
def strTotimestamp(str=None,format='%Y%m%d%H%M%S'):
#格式化的时间转时间戳
if str:
timep = time.strptime(str, format)
res = time.mktime(timep)
else:
res = time.time()
return int(res) def clean_log(path,day=3):
print('调用了')
for cur_path, dirs, files in os.walk(path):
for file in files:
if file.endswith('log'):
f_time = file.split('.')[0].split('_')[-1]
file_timestamp = strTotimestamp(f_time,'%Y-%m-%d')
cur_timestamp = strTotimestamp(time.strftime('%Y-%m-%d'),'%Y-%m-%d')
if (cur_timestamp - file_timestamp) >= 60*60*24*day:#判断文件的时间是否大于3天
os.remove(os.path.join(cur_path,file)) import pymysql
def my_db(sql):
conn = pymysql.connect(host='118.24.3.40',user='jxz',password='',
db='jxz',port=3306,charset='utf8',autocommit=True)
cur = conn.cursor(pymysql.cursors.DictCursor)
cur.execute(sql)
res = cur.fetchone() #{'username':'nhy'} {}
cur.close()
conn.close()
return res def my_db2(sql):
conn = pymysql.connect(host='118.24.3.40',user='jxz',password='',
db='jxz',port=3306,charset='utf8',autocommit=True)
cur = conn.cursor(pymysql.cursors.DictCursor)
cur.execute(sql)
res = cur.fetchall() #{'username':'nhy'} {}
cur.close()
conn.close()
return res import hashlib
def my_md5(s,salt=''):
s = s+salt
news = str(s).encode()
m = hashlib.md5(news)
return m.hexdigest()
if __name__ == '__main__':
#判断如果是在别的文件里面导入这个python文件的话,就不执行下面的代码
print(strTotimestamp())
print(clean_log('.'))
print(clean_log('.',2))
一个python项目的文件结构:

book_server/: 项目名conf/:存放配置文件
data/:存放sql文件
lib/: 存放项目的所有源代码。logs/:存放日志文件
uploads/:存放下载的文件
start.py: 程序启动脚本readme.txt: 项目说明文件。
Python操作Excel, 开发和调用接口,发送邮件的更多相关文章
- C#操作Excel开发报表系列整理(转)
C#操作Excel进行报表开发系列共写了七篇,也已经有很久没有新东西了,现在整理一下,方便以后查阅,如果有写新的,会同时更新.需要注意的是因为Office的版本不同,实际的代码可能会有所不同,但是都是 ...
- 运营的Python指南 - Python 操作Excel
这是一份写给运营人员的Python指南.本文主要讲述如何使用Python操作Excel.完成Excel的创建,查询和修改操作. 相关代码请参考 https://github.com/RustFishe ...
- 用Python操作excel文档
使用Python第三方库 这一节我们学习如何使用Python去操作Excel文档.如果大家有人不知道Excel的话,那么建议先学一学office办公基础.这里想要操作Excel,必须安装一个Pytho ...
- C#操作Excel开发报表系列整理
C#操作Excel进行报表开发系列共写了八篇,也已经有很久没有新东西了,现在整理一下,方便以后查阅,如果有写新的,会同时更新.需要注意的是因为Office的版本不同,实际的代码可能会有所不同,但是都是 ...
- Python 操作excel day5
一.Python操作excel python操作excel使用xlrd.xlwt和xlutils模块 1.xlrd模块是读取excel的: 2.xlwt模块是写excel的: 3.xlutils是用来 ...
- python - 操作excel表格
说明:由于公司oa暂缺,人事妹子在做考勤的时候,需要通过几个excel表格去交叉比对员工是否有旷工或迟到,工作量大而且容易出错. 这时候it屌丝的机会来啦,花了一天时间给妹子撸了一个自动化脚本. 1. ...
- 使用Python操作Excel文档(一)
Python | 使用Python操作Excel文档(一) 0 前言 在阅读本文之前,请确保您已满足或可能满足以下条件: 请确保您具备基本的Python编程能力. 请确保您会使用Excel. 请确保您 ...
- python操作excel表格(xlrd/xlwt)
最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而且不太能满足需求,不过经过一番对源码的"研究&q ...
- Python操作Excel
一.系统性学习 对于操作Excel,需要Xlrd/xlwt这两个模块,下面推荐出系统性学习的网址: python操作Excel读写--使用xlrd 官方文档 Python 使用 Xlrd/xlwt 操 ...
随机推荐
- matlab 加根号
text(3,0.5,'z=0.2$$\sqrt{c/h_0}$$+0.3','interpreter','latex')
- python-类对象以字典模式操作
#类对象以字典模式操作 class Person: def __init__(self): self.cache={} def __setitem__(self, key, value): #增加或修 ...
- python—shutil模块
该模块拥有许多文件或文件的删除.移动.复制.重命名等功能. 1.copy():复制文件 格式:shutil.copy(来源文件,目标地址) 返回值:返回复制之后的路径 2.copy2():复制文件和状 ...
- setLocale(java.util.Locale), setCharacterEncoding(java.lang.String),setContentType(java.lang.String type)
对于setCharacterEncoding(java.lang.String),这个方法是javax.servlet.ServletRequest和javax.servlet.ServletResp ...
- 开启IIS的WebGarden、WebFarm和StateServer之旅
前言 公司系统虽然配置有1台NLB后拖4台App Server最后搭一台强劲无比的DB Server,但每天下午4点左右总被投诉系统慢,报表下载不了等问题.究其原因,原来NLB采用锁定sessionI ...
- Python中区分函数和方法
1.简单粗暴型: def func(): ... class Foo: def eat(self): print("吃") f = Foo() print(func) #<f ...
- redis集群结构图
在JAVA编程时,使用哨兵池获取jedis来进行数据的操作,哨兵对对集群进行监视,当主节点宕掉时,会自动将子一个子节点升级为主节点,原来的主节点上线时会自动变为从节点,主节点的变化,对于使用哨兵池方式 ...
- TestNg框架基础入门
TestNg框架简介: TestNG,即Testing, Next Generation,下一代测试技术,是一套根据JUnit 和NUnit思想而构建的利用注释来强化测试功能的一个测试框架.TestN ...
- ogma
Ogma是Linkurious的JavaScript图形可视化库.Ogma的一个实例是一个javascript对象,它在内部存储一个图形, 并根据样式规则在HTML容器中呈现它. Ogma有两个版本: ...
- GIT----IDEA配置git
配置git 创建本地厂库 可以选中项目所在的目录下 此时发现所有的页面的文件都变红,是因为变红的文件还没有add 添加提交的项目(add) 选中提交的文件右击,git ,add 如果想把整个项目都ad ...