python发送excel文件_Python操作Excel, 开发和调用接口,发送邮件

接口开发:

importflaskimporttoolsimportjson,redisimportrandom

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'])defhello():

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)ifres:

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'])defreg():

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)ifres:

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')defget_stu():

username= flask.request.values.get('name')#默认get不到的话,返回的值就是None

age = flask.request.values.get('age')if username andage:

sql= "select * from app_student where name='%s' and age='%s'" %(username, age)elif not username andage:

sql= "select * from app_student where age='%s'" %ageelif username and notage:

sql= "select * from app_student where name='%s'" %usernameelse:

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

importpymysql,xlwt

conn= pymysql.connect(host='118.24.3.40',user='jxz',password='123456',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 incur.description ]#cur.description获取到表结构

res.insert(0,fields)

book=xlwt.Workbook()

sheet= book.add_sheet('sheet1')for index,value inenumerate(res):for index2,v2 inenumerate(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)

importpymysql,redis,json

conn= pymysql.connect(host='118.24.3.40',user='jxz',password='123456',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 indata:#{'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

importyagmail

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':'111111'}

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

importrequestsimportrandom

url='http://127.0.0.1:8999/api/upload'data= {'username':'testuser1','passwd':'111111'}

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

importnnlog

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.pyimporttimeimportosdef timestampToStr(timestamp=None,format='%Y-%m-%d %H:%M:%S'):#时间戳转格式化好的时间

iftimestamp:

time1=time.localtime(timestamp)

res=time.strftime(format, time1)else:

res=time.strftime(format)returnres#20180304153958

def strTotimestamp(str=None,format='%Y%m%d%H%M%S'):#格式化的时间转时间戳

ifstr:

timep=time.strptime(str, format)

res=time.mktime(timep)else:

res=time.time()returnint(res)def clean_log(path,day=3):print('调用了')for cur_path, dirs, files inos.walk(path):for file infiles: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))importpymysqldefmy_db(sql):

conn= pymysql.connect(host='118.24.3.40',user='jxz',password='123456',

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()returnresdefmy_db2(sql):

conn= pymysql.connect(host='118.24.3.40',user='jxz',password='123456',

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()returnresimporthashlibdef my_md5(s,salt=''):

s= s+salt

news=str(s).encode()

m=hashlib.md5(news)returnm.hexdigest()if __name__ == '__main__':#判断如果是在别的文件里面导入这个python文件的话,就不执行下面的代码

print(strTotimestamp())print(clean_log('.'))print(clean_log('.',2))

一个python项目的文件结构:

1528135-20181223232805277-1036408107.png

book_server/: 项目名

conf/:存放配置文件

data/:存放sql文件

lib/: 存放项目的所有源代码。

logs/:存放日志文件

uploads/:存放下载的文件

start.py: 程序启动脚本

readme.txt: 项目说明文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/538585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go conn 读取byte数组后是否要_【技术推荐】正向角度看Go逆向

Go语言具有开发效率高,运行速度快,跨平台等优点,因此正越来越多的被攻击者所使用,其生成的是可直接运行的二进制文件,因此对它的分析类似于普通C语言可执行文件分析,但是又有所不同,本文将会使用…

Confluence 6 选择一个外部数据库

2019独角兽企业重金招聘Python工程师标准>>> 注意: 选择一个合适的数据库通常需要花费很多时间。同时 Confluence 自带的 XML 数据备份和恢复功能通常也不适合合并和备份有大量数据的数据库。如果你想在系统运行后进行数据合并,你通常需要使用…

python爬取内容乱码_python爬取html中文乱码

环境: python3.6 爬取代码: import requests url https://www.dygod.net/html/tv/hytv/ req requests.get(url) print(req.text) 爬取结果: / _-如上,title内容出现乱码,自己感觉应该是编码的问题,但是不…

前端每日实战:34# 视频演示如何用纯 CSS 创作在文本前后穿梭的边框

效果预览 按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。 https://codepen.io/comehope/pen/qYepNv 可交互视频教程 此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。 请用 chrome, safari, edge 打开观看。…

spark shell中编写WordCount程序

启动hdfs 略http://blog.csdn.net/zengmingen/article/details/53006541 启动spark 略安装:http://blog.csdn.net/zengmingen/article/details/72123717 spark-shell:http://blog.csdn.net/zengmingen/article/details/72162821准备数据 vi wordcount.t…

mysql计算机二级选择题题库_全国计算机二级mysql数据库选择题及答案

全国计算机二级mysql数据库选择题及答案选择题是全国计算机二级mysql考试里的送分题,下面小编为大家带来了全国计算机二级mysql数据库选择题及答案,欢迎大家阅读!全国计算机二级mysql数据库选择题及答案1) 函数 max( ) 表明这是一个什么函数?…

git add 撤销_更科学地管理你的项目,Git 简明教程(二)

修改文件内容上回说到,我们已经成功创建并提交了一个 README.md 文件到 FirstGit 版本库中1、修改文件现在我们更改 README.md 内容2、查看版本库状态该文件夹内右键运行 Git Bash Here执行命令 git statusGit 提示我们的改动还没有 commit,并且它给出了…

Eclipse中Copy Qualified Name复制类全名解决办法

原文链接:http://www.cnblogs.com/zyh1994/p/6393550.html ----------------------------------------------------------------------------------------------- Eclipse中 用Copy Qualified Name复制类全名时 总是这样的/struts1/src/me/edu/HelloAction.java很不…

gitlab 删除分支_如何删除gitlab上默认受保护的master主分支

今天开发在检查代码的时候,发现master分支有问题,现在准备删除此主分支,并且重新提交正确的代码,不过在删除时发现,master分支不能被删除。ps:主分支一般都是线上分支,需要开发确认后并且做好备…

NodeJs 安装

进入官网下载,zip 安装包 https://nodejs.org/en/download/ 解压 配置环境变量到安装目录 cmd 测试 node -v npm -v

SSH秘钥登录服务器

一、查看本机 ssh 公钥,生成公钥 1.通过命令窗口 a. 打开你的 git bash 窗口 b. 进入 .ssh 目录:cd ~/.ssh c. 找到 id_rsa.pub 文件:ls d. 查看公钥:cat id_rsa.pub 或者 vim id_rsa.pub git–查看本机 ssh 公钥&#xff0c…

mysql存入mtr数据_mysql mtr写入数据

selenium 打开浏览器import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebE ...Win8.1安装Visual Studio 2015提示需要KB2919355http://www.microsoft.com/zh-cn/download/details.aspx?id42335 安装说明: 1.若要…

diff git 代码实现_Git 自救指南:这些坑你都跳得出吗?

每天都会写架构师文章,Java技术文章天天更新,感兴趣的点个关注再走呗!Git 虽然因其分布式管理方式,不完全依赖网络,良好的分支策略,容易部署等优点,已经成为最受欢迎的源代码管理方式。但是一分…

Angular CLI 安装

安装Angular 官网的教程,因为国内网络环境原因,访问不了服务器,导致安装失败。 1、先安装NodeJs 安装教程:http://blog.csdn.net/zengmingen/article/details/72650484 2、通过NodeJs中的模块npm 命令行安装 CLI 2.1、设置npm的…

go 写文件_「go」 项目多个文件编程

golang 学习的时候很多sample 讲的都是一个文件的go 文件怎么写,但是现实中不可能所有的实现都写到一个文件里面,按照功能的不同,要么拆分成不同的文件,要么拆分成不同的文件。下面有些个人的经验分享下,如果有问题请指…

CycleGAN 各种变变变

转载自 简单介绍了一下GAN和DCGAN的原理。以及如何使用Tensorflow做一个简单的生成图片的demo。 Ian Goodfellow对GAN一系列工作总结的ppt,确实精彩,推荐:独家 | GAN之父NIPS 2016演讲现场直击:全方位解读生成对抗网络的原理及未来…

Webstorm常用快捷键

webstrom 使用 eclipse快键键 File--settings keymap 选择 eclipse 原文链接:http://www.cnblogs.com/yeminglong/p/5995421.html ------------------以下是webstrom默认的----------------------------------- Ctrl/ 或 CtrlShift/ 注释(// 或者/…

疯狂的程序员_程序员的乐趣是什么?

作者:Java3y我是一个程序员,外行人都以为我是修电脑的,我笑了笑,随意ctrl cctrl v了一把,想象着你们因为我的文章而开心不止,我感到充实而欣慰。想象着你们给我拼命点赞的样子,是多么的滑稽&…

template多行编写的方式

模板是包在 ECMAScript 2015 反引号 () 中的一个多行字符串。 反引号 () — 注意,不是单引号 () — 允许把一个字符串写在多行上, 使 HTML 模板更容易阅读。 反引号:键盘数字键1 旁边的,ESC键下面的键 如果单引号 Component({sel…

sqllite事务和MySQL事务_Android学习---SQLite数据库的增删改查和事务(transaction)调用...

上一篇文章中介绍了手工拼写sql语句进行数据库的CRUD操作,本文将介绍调用sqlite内置的方法实现CRUD操作,其实质也是通过拼写sql语句.首先,创建一个新的android项目:其次,查看代码实现增删查改:1.创建DB工具类MyDBHelper.java(创建数据库的操作)packagecom.amos.android_db;impo…