学习笔记七 模块导入,redis和Excel操作,基本接口开发

一.模块导入

import 模块名

一个模块的实质就是把这个python文件从头到尾执行一遍

import模块的查找模块的顺序
1、从py执行程序的当前目录下找
2、从sys.path里查找
从上面2个目录都找不到,那就报错。

三种方法添加当前模块至程序可识别范围:

1、将模块文件手动拷贝到py执行程序的当前目录中

2、在执行文件中将模块的路径depend加入到sys.path

3、pycharm中将模块标记执行Sources Root操作

二.Redis操作

redis是一种非关系型数据库,是以键值对的形式存放数据,数据是存放在内存中。redis的key有两种数据类型,一是string类型,一是hash类型,他们的操作方式不相同。

1、redis的连接:

redis.Redis(host=ip,password=password,port=6379,db=10,decode_responses=True)

#连接redis,db代表数据库名字,decode_responses=True指定后,数据返回的不是以byte形式,会进行编码

2、redis新增数据

string类型的新增:

#在Redis中设置值,默认不存在则创建,存在则修改
r.set('name', 'zhangsan')
'''参数:
     set(name, value, ex=None, px=None, nx=False, xx=False)
     ex,过期时间(秒)
     px,过期时间(毫秒)
     nx,如果设置为True,则只有name不存在时,当前set操作才执行,同setnx(name, value)
     xx,如果设置为True,则只有name存在时,当前set操作才执行'''

redis的value也可以接dict形式:

r.set('sessionn','sdfsdfssdf234sfdfsdsdfs',20)#过期时间20秒
r.set('info','{"name":"xxxx","password":"123456","account":11234}',20)#过期时间20秒

如果不在set的时候指定过期时间,可以用expire函数指定过期时间,需要指明对应的key

r.set('session','sdfsdfsdfss')
r.expire('session',20) #指定过期时间

hash类型的新增:

hash类型可以理解为嵌套的dict类型,string类型可以理解为非嵌套的dict类型

r.hset('sms_code','18612532945','121213') #set值

因为hash是嵌套的dict,所以第一个参数是key的值,第二个参数是value里小key的值,在hset里不可以指定过期时间,只能用expire函数指定过期时间。

3、redis新增数据删除

string类型删除:

r.delete('nhy_info') #删一个不存在的key,也不会报错
r.flushall() #清空所有数据库里面的数据
r.flushdb() #只清空当前数据库里面的数据

hash类型删除:

r.hdel('sms_code','18201034732') #删除指定的key
r.delete('sms_code') #把整个key删除掉

4、redis数据查询:

sting类型的value查询:

res  = r.get('nhy_info') 

hash类型的value查询:

r.hget('sms_code','18201034732') #获取值
r.hgetall('sms_code') #获取到这个key里面所有的内容

key的查询:

r.keys() #获取到所有的key
r.keys('*session*') #模糊匹配

5、redis的修改:同新增操作(默认不存在则创建,存在则修改)

6、对于redis的key属于string还是hash类型,可以用type判断:

r.type('sms_code'))
r.type('lyl_session007')

7、redis代码小示例:

#1、把现在这个redis数据库里面的数据全部整到另外一个redis里面
#  a     有数据
#  b    空
#要把a redis里面的数据 全部到迁移到b redis
    # 1、连上2个redis
    # 2、先从a redis里面获取到所有key
    # 3、然后判断key是什么类型,根据类型来判断使用什么方法
    # 4、从aredis里面获取到数据,set 到b redis里面
import redis
ip = '192.168.1.130'
password='123456'
r = redis.Redis(host=ip,password=password,port=6379,db=3,decode_responses=True)#连接redis
r2 = redis.Redis(host=ip,password=password,port=6378,db=2,decode_responses=True)#连接redis
all_key = r.keys()
for k in all_key:
    if r.type(k) == 'string':
        a_data = r.get(k)#从aredis获取到的数据
        r2.set(k,a_data)
    elif r.type(k) =='hash':
        hash_data = r.hgetall(k)    # {'key1':'v1',key2:v2}
        for key,v in hash_data.items():
            r2.hset(k,key,v)

三.excel操作

1、excel读取:

 1 import xlrd
 2 book = xlrd.open_workbook('stu3.xls')#打开一个xls文件
 3 sheet = book.sheet_by_index(0)#根据sheet页的标号指定打开一个sheet页
 4 sheet1 = book.sheet_by_name('sheet1')#根据指定的sheet名打开一个sheet页
 5 print(sheet.cell(0,0).value)#获取指定单元格的内容
 6 print(sheet.cell(1,0).value)
 7 print(sheet.row_values(0)) #获取整行的数据
 8 print(sheet.row_values(1))
 9 print(sheet.col_values(0))#获取整列的数据
10 print(sheet.col_values(1))
11 
12 print(sheet.nrows) #行数
13 print(sheet.ncols) #列数
14 for row in range(1,sheet.nrows):
15     print(sheet.row_values(row))

2、excel写入:

 1 #以下是要写入表格的数据
 2 stu_info  = [
 3     ['编号','姓名','密码','性别','地址'],
 4     [1,'machunbo','sdfsd23sdfsdf2','','北京'],
 5     [2,'machunbo2','sdfsd23sdfsdf2','','北京'],
 6     [3,'machunb3','sdfsd23sdfsdf2','','北京'],
 7     [4,'machunbo4','sdfsd23sdfsdf2','','北京'],
 8     [5,'machunbo5','sdfsd23sdfsdf2','','北京'],
 9     [6,'machunbo6','sdfsd23sdfsdf2','','北京'],
10     [7,'machunbo6','sdfsd23sdfsdf2','','北京'],
11     [8,'machunbo6','sdfsd23sdfsdf2','','北京'],
12     [9,'machunbo6','sdfsd23sdfsdf2','','北京'],
13     [10,'machunbo6','sdfsd23sdfsdf2','','北京'],
14     [11,'machunbo6','sdfsd23sdfsdf2','','北京'],
15 ]
16 
17 import xlwt
18 book = xlwt.Workbook() #新建一个excel
19 sheet = book.add_sheet('sheet1') #添加一个sheet页
20 
21 
22 for index,value in enumerate(stu_info):
23     #  index 0
24     # value ['编号','姓名','密码','性别','地址']
25 
26     #index 1
27     #value [1,'machunbo','sdfsd23sdfsdf2','男','北京']
28     for index2,v2 in enumerate(value):
29         print(index,index2,v2)
30         #0 1
31         #1 machunbo
32         #2 sdfsd23sdfsdf2
33         #4 北京
34         sheet.write(index,index2,v2)
35 
36 book.save('stu3.xls')  #wps可以写入 xls xlsx  ,微软的office只能写入  xls

3、excel修改:

excel不能直接在原文件上修改,只能通过copy一份新的,在新的文件中写入修改的地方,最后再save进行保存完成。

 1 import xlrd
 2 from xlutils import copy
 3 
 4 #1、先打开原来的excel
 5 #2、复制一份
 6 #3、在复制的excel上修改
 7 #4、保存
 8 
 9 book = xlrd.open_workbook('stu3.xls')
10 new_book = copy.copy(book) #
11 sheet = new_book.get_sheet(0) #修改excel的时候,得用get_sheet(),并且参数只能是sheet的index,不能通过name的形式
12 sheet.write(0,0,'id')
13 sheet.write(0,3,'password')
14 new_book.save('stu3.xls')

四.接口开发

1、定义服务:定义接口之前必须定义服务

import flask
server = flask.Flask(__name__)
#新建一个服务,把当前这个python文件当做一个服务

2、定义接口:

 1 @server.route('/login',methods=['get','post'])#装饰器,修饰下面的函数为一个接口
 2 def hello():
 3     uname = flask.request.values.get('username')#从web请求中获取输入的参数信息
 4     pd = flask.request.values.get('passwd')
 5     sql = 'select * from app_myuser where username="%s"'%uname
 6     res = tools.my_db(sql)
 7     if res:
 8         if tools.my_md5(pd) == res.get('passwd'):
 9             res = {"code":0,"msg":"登录成功!"}
10         else:
11             res = {"code":1,"msg":"密码错误!"}
12     else:
13         res = {'code':2,"msg":"用户不存在"}
14     return json.dumps(res,ensure_ascii=False,indent=4)
15 
16 @server.route('/reg',methods=['post'])
17 def reg():
18     uname = flask.request.values.get('username')
19     pd = flask.request.values.get('passwd')
20     cpd = flask.request.values.get('cpwd')

methods说明改接口是支持get还是post,可以都支持。

3、接口启动:

server.run(host='0.0.0.0',port=8999,debug=True)

写在文件最后,debug=true,代表调试模式,在文件修改之后可以自动生效,无需重启服务。host='0.0.0.0'表示可以接受来自任意ip的访问,如果写成127.0.0.1则表示只接受来自本机的访问。

原文地址:https://www.cnblogs.com/eichar/p/10209587.html