python语言(五)匿名函数、读写excel、操作数据库、加密、redis操作
一、匿名函数
递归:就是调用自己
def func():
num = int(input('num:'))
if num % 2 ==0:
print('是偶数')
return
else:
func()
func() # 递归最多循环999次
匿名函数lambda
# 匿名函数 lambda
lambda x:x+1 # 冒号前面是:入参 冒号后面:返回值 (lambda用完一次就消失,f(x)会存在内存里)
# 简化:==
def f(x):
return x+1
f = lambda x,b:str(x+b) result = f(1,2) print(f)
二、读写excel
利用xlrd和xlwt进行excel读写(xlwt不支持xlsx)

.png)
2.1 写Excel
book = xlwt.Workbook() # 建立excel
sheet = book.add_sheet('sheet1') # 添加sheet1表
sheet.write(0, 0, '名字') #(第1行,第1列)
sheet.write(1, 0, '张三') # (第2行,第一列)
sheet.write(2, 0, '李四') # ...
sheet.write(3, 0, '王五')
sheet.write(0, 1, '手机号')
sheet.write(1, 1, ')
sheet.write(2, 1, ')
sheet.write(3, 1, ')
book.save("students.xls") # 保存文件

import xlwt # 导入模块
book = xlwt.Workbook() # 建立excel
sheet = book.add_sheet('sheet1') # 添加sheet1表
stus = [
["id","name","sex","age","addr","grade","phone","gold"],
[314,",14405],
[315,",100],
[5985,",100]
]
# enumerate() 枚举函数
# 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
# enumerate(sequence, [start=0])
for row, stu in enumerate(stus):
for col, field in enumerate(stu):
sheet.write(row, col, field)
book.save('students.xls')

2.2 读Excel
import xlrd # 导入模块
book = xlrd.open_workbook('student.xls') # 打开excel
sheet = book.sheet_by_index(0) # 获取第1张表
# sheet = book.sheet_by_name('sheet1')
读取某个单元格内容
result = sheet.cell(0,0).value # 获取某个单元格的内容
print('某个单元格的内容',result)
读取整行内容
row = sheet.row_values(0) # 获取整行的内容
print('某一行的内容',row)
读取整列内容
col = sheet.col_values(0) # 获取整列的内容
print('某一列的内容',col)
获取行数列数
print(sheet.nrows) # 总共多少行 print(sheet.ncols) # 总共多少列
for row_num in range(1,sheet.ncols): # 1:从第二行开始就避免显示第一行
print(sheet.row_values(row_num)) # 读取所有列信息
[314.0, ', 14405.0] [315.0, ', 100.0] [5985.0, ', 100.0]
三、操作数据库mysql
3.1 安装pymysql
.png)
3.2操作步骤
"""1、连接本地数据库2、建立游标3、创建表4、插入表数据、查询表数据、更新表数据、删除表数据"""
import pymysql # 导入pymysql模块
ip = "118.24.3.40"
user = 'jxz'
password = "
db = 'jxz'
port = 3306
charset = 'utf8'
# 连接数据库
conn = pymysql.connect(
host=ip,
user=user,
password=password,
db=db,
port=port,
charset=charset)
# 建立游标
cur = conn.cursor() # 游标
sql = 'select * from app_myuser limit 10;'
cur.execute(sql) # 执行sql语句
all=cur.fetchall() # 获取所有
one=cur.fetchone() # 获取一条
many=cur.fetchmany(2) #获取1条
print(one)
print(many)
print(all)
# 用完要关闭连接
cur.close() # 关连接
conn.close() # 关游标
None () ((1, ', None, 0, None))
3.3创建表
autocommit=True 在执行sql语句后将会自动提交
cursorclass=pymysql.cursors.DictCursor 返回结果值以字典形式显示
import pymysql # 导入pymysql模块
ip = "118.24.3.40"
user = 'jxz'
password = "
db = 'jxz'
port = 3306
charset = 'utf8'
# 连接数据库
conn = pymysql.connect(
host=ip,
user=user,
password=password,
db=db,
port=port,
charset=charset,
autocommit=True,
cursorclass=pymysql.cursors.DictCursor)
# autocommit=True 在执行sql语句后将会自动提交
# cursorclass=pymysql.cursors.DictCursor 返回结果值以字典形式显示
# 建立游标
cur = conn.cursor() # 游标
sql = 'create table bzz(id int unique not null,name varchar(20) not null,phone varchar(11) unique not null);'
sql1 = 'insert into bzz(id,name,phone) values(3,"老黄","13217054461");'
sql2 = 'insert into bzz(id,name,phone) values(1,"小黄","18217057798");'
sql3 = 'insert into bzz(id,name,phone) values(2,"小瓜","15217057087");'
sql4 = 'select * from bzz;'
# cur.execute(sql) # 执行 insert语句、update语句、delete语句,必须commit才能执行
# conn.commit() # 提交
# cur.execute(sql1)
# conn.commit() # 提交
# cur.execute(sql2)
# conn.commit() # 提交
# cur.execute(sql3)
# conn.commit() # 提交
cur.execute(sql4)
all = cur.fetchall() # 获取所有
print(all)
# 用完要关闭连接
cur.close() # 关连接
conn.close() # 关游标
[{', 'id': 3}]
3.4 数据库封装成一个函数
封装数据库函数,方便以后调用
import pymysql # 导入pymysql模块
def op_mysql(sql):
info = {
'user': 'jxz',
',
'host': '118.24.3.40',
'db': 'jxz',
'port': 3306,
'charset': 'utf8',
'autocommit': 'True',
'cursorclass': 'pymysql.cursors.DictCursor'}
conn = pymysql.connect(info) # 建立连接
cur = conn.cursor() # 游标
cur.execute(sql) # 执行sql语句
result = cur.fetchall()
cur.close()
conn.close()
return result
op_mysql() #user=jxz,password=123456
四、MD5加密
4.1加密成MD5码
导入 hashlib模块 里面有MD5方法
首先要变成.encode() beyte类型
然后变成MD5码:.MD5(.encode())
.hexdigest() 获取加密后的结果
【MD5码加密后都是32位】
import hashlib s='admin123' print(s.encode()) # .encode()变成beyte类型 m = hashlib.md5(s.encode()) # 加密成MD5码 只能加密不能解密 result = m.hexdigest() # 获取加密后的结果 print(result)
b'admin123' 0192023a7bbd73250516f069df18b500
4.2 为了提高安全性,在密码后面“加盐” #salt
salt = '2r23$@fds' # 盐
password = input('password:')
password += salt # 加盐
m = hashlib.md5(password.encode())
result = m.hexdigest() # 获取加密后的结果
print(result)
password:5tgb^YHN 93523fbd41418707ddf37ecfe332b5a1
封装加盐MD5码方法
def md5(s,salt=''):
new_s = str(s) + salt
m = hashlib.md5(new_s.encode())
return m.hexdigest()
4.3 base64 加密方法 能加密,也能解密
base64 加密结果都是字母加数字形式
加密
import base64 # base64加密法 能加密,也能解密 s = '哈哈哈哈' b = base64.b64encode(s.encode()) result = b.decode() print(result) # 加密base64
5ZOI5ZOI5ZOI5ZOI
解密
import base64 # base64加密法 能加密,也能解密
b = base64.b64decode('5ZOI5ZOI5ZOI5ZOI') # .b64decode() 解密
result = b.decode()
print(result)
哈哈哈哈
将url编码成base64
后面带“=”的基本是base64加密
# 想将字符串转编码成base64,要先将字符串转换成二进制数据
url = "https://www.cnblogs.com/songzhixue/"
bytes_url = url.encode("utf-8")
str_url = base64.b64encode(bytes_url) # 被编码的参数必须是二进制数据
print(str_url)
b'aHR0cHM6Ly93d3cuY25ibG9ncy5jb20vc29uZ3poaXh1ZS8='
解密
# 将base64解码成字符串
import base64
url = "aHR0cHM6Ly93d3cuY25ibG9ncy5jb20vc29uZ3poaXh1ZS8="
str_url = base64.b64decode(url).decode("utf-8")
print(str_url)
'https://www.cnblogs.com/songzhixue/'
五、redis操作
REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
Redis 在 Java Web 主要有两个应用场景:
- 存储 缓存 用的数据;
- 需要高速读/写的场合使用它快速读/写;
1>当第一次读取数据的时候,读取 Redis 的数据就会失败,此时就会触发程序读取数据库,把数据读取出来,并且写入 Redis 中;
2>当第二次以及以后需要读取数据时,就会直接读取 Redis,读到数据后就结束了流程,这样速度就大大提高了。
mysql 、 oracle 、 sqlserver 、 sqlite
mongodb 、 redis

关系型数据库
优点:
1、易于维护:都是使用表结构,格式一致;
2、使用方便:SQL语言通用,可用于复杂查询;
3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。
缺点:
1、读写性能比较差,尤其是海量数据的高效率读写;
2、固定的表结构,灵活度稍欠;
3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
非关系型数据库
优点:
1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
3、高扩展性;
4、成本低:nosql数据库部署简单,基本都是开源软件。
缺点:
1、不提供sql支持,学习和使用成本较高;
2、无事务处理;
3、数据结构相对复杂,复杂查询方面稍欠。
5.1 首先导入redis
import redis
# redis 每秒钟达到10w次读写,存在内存里面# web 开发时用redis做缓存 redis只有ip、端口号、密码
118.24.3.40、
6379、
HK139bc&*
import redis
r = redis.Redis(
host='118.24.3.40',
password='HK139bc&*',
port=6379,
db=0,
decode_responses=True)
r.set('dabaobao', '{"msg":"hejfdsfdsaj dlajfwajofjdsa是范德萨范德萨"}')
# 字符串
# 传送数据
r.set('name','小黄') # set就是传送数据(k,v)
# 获取数据
r.get('name')
# 删除数据
r.delete('mjz_students')
print(r.get('mjz_students').decode()) # 后面加 .decode()就把beyte类型变成字符串
r.set('mjz_students', '{"msg":"sdfdgwsd"}', 20) # 第三个参数设定过期时间:运行20秒后过期
r.expire('dabaobao',30) # 设置失效时间,给'dabaobao'这个key加30秒时间
r = redis.Redis(
host='118.24.3.40',
password='HK139bc&*',
port=6379,
db=0,
decode_responses=True) # decode_responses=True 可以自动将查出来的code变成字符串
5.2 哈希类型
第一个参数表示:传送Key是谁
第二个参数表示:传送小key
第三个参数表示:传送小key的value
r.hset("students",'bzz','{"money":500,"addr":"北京"}')
r.hset("students",'qdk','{"money":520,"addr":"上海"}')
r.hset("students",'yrd','{"money":501,"addr":"北京"}')
r.hset("students",'pld','{"money":502,"addr":"南京"}')
5.3 其他方法
#其他方法
r.flushall() # 清空所有数据库的所有内容
r.flushdb() # 清空当前数据库里面的数据
r.exists('name') # 判断key是否存在
r.keys() # 获取单数数据库所有的key
r.type('name') # 获取key的类型
5.4 redis迁移
1、从redis里面获取所有的key2、判断key的类型3、根据key 的类型,使用set/hset4、set 到redis里
import redis
r = redis.Redis(
host='118.24.3.40',
password='HK139bc&*',
port=6379,
db=0,
decode_responses=True) # decode_responses=True 可以自动将查出来的code变成字符串
r2 = redis.Redis(
host='118.24.3.40',
password='HK139bc&*',
port=6378,
db=0,
decode_responses=True)
# 数据迁移
# 1、从redis里面获取所有的key
# 2、判断key的类型
# 3、根据key 的类型,使用set/hset
# 4、set 到redis里
for k in r.keys():
if r.type(k) == 'string':
value = r.get(k)
r2.set(k,value)
if r.type(k) == 'hash':
value = r.hgetall(k) # 获取所有的
r2.hmset(k,value)
5.5 管道
1、 先把数据保存到pipeline里2、 执行管道,一次性把所有数据传过去优点:传送数据比较快(批量执行)
pipeline = r.pipeline() # 建立一个管道
l = range(500)
for i in l:
pipeline.set("key%s" %i,str(i)) # 1、先把数据存到管道里
pipeline.execute() # 2、执行管道,一次性把所有数据传过去
python语言(五)匿名函数、读写excel、操作数据库、加密、redis操作的更多相关文章
- Python之路Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数
Python之路Python作用域.匿名函数.函数式编程.map函数.filter函数.reduce函数 一.作用域 return 可以返回任意值例子 def test1(): print(" ...
- [日常] Go语言圣经-匿名函数习题
Go语言圣经-匿名函数1.拥有函数名的函数只能在包级语法块中被声明,通过函数字面量(function literal),我们可绕过这一限制,在任何表达式中表示一个函数值2.通过这种方式定义的函数可以访 ...
- Python入门篇-匿名函数
Python入门篇-匿名函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.匿名函数概述 1>.什么是匿名函数 匿名,即没有名字 匿名函数,即没有名字的函数 2>. ...
- 在使用python语言的open函数时,提示错误OSError: [Errno 22] Invalid argument: ‘文件路径’
如题,在使用python语言的open函数时,提示错误OSError: [Errno 22] Invalid argument: '文件路径',在查阅了大量资料后也得到了一些解决方案,但是这些解决方案 ...
- 孤荷凌寒自学python第五十天第一次接触NoSql数据库_Firebase
孤荷凌寒自学python第五十天第一次接触NoSql数据库_Firebase (完整学习过程屏幕记录视频地址在文末) 之前对关系型数据库的学习告一段落,虽然能力所限没有能够完全完成理想中的所有数据库操 ...
- Python的lambda匿名函数
lambda函数也叫匿名函数,即,函数没有具体的名称.先来看一个最简单例子: def f(x):return x**2print f(4) Python中使用lambda的话,写成这样 g = lam ...
- python学习交流 - 匿名函数
匿名函数 匿名函数是一个很有特色的定义函数的功能.在实际使用的过程,用户有时不得不为一些一行代码即可实现的功能来定义一个函数,例如像map, max, filter等内置函数的key参数只能接收可调用 ...
- python基础(10)-匿名函数&内置函数
匿名函数 例子 返回两个数的和 def add(x, y): return x + y # 等价于 add = lambda x, y: x + y 返回字典中值最大的key dic = {'a': ...
- Python之路(第七篇)Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数
一.作用域 return 可以返回任意值例子 def test1(): print("test1") def test(): print("test") ret ...
随机推荐
- 红黑树和AVL树的区别(转)
add by zhj: AVL树和红黑树都是平衡二叉树,虽然AVL树是最早发明的平衡二叉树,但直接把平衡二叉树等价于AVL树,我认为非常不合适. 但很多地方都在这么用.两者的比较如下 平衡二叉树类型 ...
- Oracle查询所有字段另加两个拼接字段的操作
Oracle查询所有字段,再加两个字段拼接, select a.*,(SNO||SNAME) from TEST_STUDENT a; 同理,查询所有字段,其中两个字段求和:(SNO和SAGE都是NU ...
- 打印出三位数的水仙花数Python
水仙花数计算 ...
- 2019 思贝克java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.思贝克等公司offer,岗位是Java后端开发,因为发展原因最终选择去了思贝克,入职一年时间了,也成为了面试官 ...
- Java自学-接口与继承 final
Java的修饰符final final修饰类,方法,基本类型变量,引用的时候分别有不同的意思. 示例 1 : final修饰类 当Hero被修饰成final的时候,表示Hero不能够被继承 其子类会出 ...
- 学习笔记之正则表达式 (Regular Expressions)
正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...
- 1. vue.js介绍
1. 什么是vue.js Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App, Vue语法也是可以用于进行手机App开发的,需要借助 ...
- 搭建idea出现无法自动映射Mapper问题
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 如出这种问题,导致的原因是mapp.xm ...
- OCR2:tesseract字库训练
由于tesseract的中文语言包“chi_sim”对中文字体或者环境比较复杂的图片,识别正确率不高,因此需要针对特定情况用自己的样本进行训练,提高识别率,通过训练,也可以形成自己的语言库. 工具: ...
- 搭建前端监控系统(五)Nodejs怎么搭建消息队列
怎样定位前端线上问题,一直以来,都是很头疼的问题,因为它发生于用户的一系列操作之后.错误的原因可能源于机型,网络环境,接口请求,复杂的操作行为等等,在我们想要去解决的时候很难复现出来,自然也就无法解决 ...