上周复习:

1、内置函数

len

type

max()

sum()

round(5.3212,2)#取几位小数

char() #

ord() #

sorted()#排序

reversed()#反向

res = list(filter(func,[1,2,3,4,5]))#循环调用函数,False过滤,必须用list转换

res = list(map(func,[1,2,3,4,5]))循环调用,返回结果,必须用list转换

id()

eval('1+1')#执行简单代码

'''

import os

os.system('xxx')

'''

exec('')#执行复杂代码

2、函数的一点补充

递归:函数自己调用自己。

3、匿名函数

lambda s:str(s).isdigit()

def func(s):

return str(s).isdigit()

4、第三方模块安装

pip install xxx

easy_install xxx 需要安装setuptools模块

1、python操作xxx的模块

.whl

pip install 路径/pymysql.whl

.tar.gz

解压

python3 setup.py install

下面是电脑上装了多个版本的python

那你要去python的安装目录下,分别把python.exe

改个名字,能区分出来是python2还是python3

python2 -m pip install xxx

python3 -m pip install xxx

5、hashlib模块

import hashlib

s = 'xxxxx'

s = s.encode()

m = hashlib.md5(s)

res = m.hexdigest()

6、mysql数据库操作

import pymysql

conn = pymysql.connect(host,user,db,password,port,charset,

autocommit=True)

cur = conn.cursor(pymysql.cursors.DictCursor)

cur.execute(sql)

'select * from user;'

cur.fetchall() # ((1,name,password),(2,name,passwd2))

cur.fetchone() # (1,name,passwrd) {'id':1,"name":name,

"password":123234}

cur.close()

conn.close()

os.walk(r'e:\\') #递归循环一个目录

上周作业:

#1.需求:写一个函数,传入一个路径和一个关键字(关键字是文件内容),找到文件内容里面有这个关键字的文件

#循环读取路径下文件,存在关键字,返回路径+文件名

importosdef seekfile(keyword,path=r'C:\Users\HDL\PycharmProjects\untitled\python'):for cur_path, cur_dirs, cur_files inos.walk(path):for file incur_files:if file.endswith('.txt'):

with open(os.path.join(cur_path,file),'r',encoding='utf-8') as f:for line inf:if keyword inline:

res=os.path.join(cur_path,file)print('包含%s的文件是%s'%(keyword,res))breakseekfile('list')

#2、删除3天前的日志文件

#1、要获取到所有的日志文件 os.walk()

#2、先获取到文件的时间

#3、要判断文件的日期是否在三天前 当天的日期的时间戳 - 60*60*24*3

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

3.注册、登录功能,从数据库判断用户是否存在,密码要加密

#需求:写一个注册的功能,要求数据存在数据库里面

# 1、名字为空、已经存在都要校验

# 2、校验通过之后,密码要存成密文的。

#定义函数,mysql操作,不传入用户名表示读取数据库表,传入表示写入数据库

#读取数据库表,判断用户名是否存在

#md5密码加密,加盐

#登录、注册

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

s= s+salt

news=str(s).encode()

m=hashlib.md5(news)returnm.hexdigest()defreg():for i in range(3):

user=input('username:').strip().upper()

pd= input('password:').strip()

cpd= input('cpwd:').strip()

sql='select username from app_myuser where username = "%s";'%userif len(user) not in range(6,11) or len(pd) not in range(6,11): #6 7 8 9 10

print('账号/密码长度错误,6-10位之间')elif pd !=cpd:print('两次输入密码不一致')elifmy_db(sql):print('用户已存在')else:

md5_passwd=my_md5(pd)

insert_sql= 'insert into app_myuser (username,passwd,is_admin)'\'value ("%s","%s",1);'%(user,md5_passwd)

my_db(insert_sql)print('注册成功!')break

else:print('失败次数过多!')deflogin():for i in range(3):

username= input('请输入用户名:').strip().upper()

password= input('请输入密码:').strip()

sql='select username,passwd from app_myuser where username = "%s";'%usernameif username =='' or password =='':print('账号/密码不能为空')else:

res= my_db(sql) #{'username':nhy 'passwd':'xxxxx'}

ifres:if my_md5(password) == res.get('passwd'):print('登陆成功!')break

else:print('密码错误!')else:print('用户不存在')else:print('错误次数过多!')

上课内容:

导入模块:

1.导入模块的实质:

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

importmy

注:直接导入文件名,不要加”.py”,把my里边的从头到尾执行一遍

2. import模块的查找模块的顺序

1)   从当前目录下找该文件

2)   从sys.path系统路径下查找该文件

3)   从上面2个目录都找不到,那就报错

3. 调用导入模块中的函数

1)  直接import

importmy#导入模块

my.sayName()#调用模块中的函数,前边一定要有模块名

2)

from

import

frommy importsayName #from 模块文件名 import 函数名

sayName()#直接调用函数,不用加my.

3. 模块文件放到哪里合适

1)   放到当前文件的目录下,这样比较麻烦,每次需要复制模块文件

2)   放到sys.path的其中一个路径下,但是每次需要复制模块文件

3)   把模块文件的路径加到sys.path中,但是这个只是临时的,每次导入模块文件之前都需要执行这个操作,比较麻烦

sys.path.append(r'/Users/nhy/PycharmProjects/day6')

4)   Pycharm左侧树下新建一个文件夹,里边存放常用的模块文件,选中该文件夹右键Mark Dicrectory As-Sources Root,则该文件夹及下边文件添加到sys.path下,永久有效,重启pycharmy也不会丢失

4.调用导入模块中的函数

1)  直接import

importmy#导入模块

my.sayName()#调用模块中的函数,前边一定要有模块名

2)

from

import

frommy importsayName  #from 模块文件名 import 函数名

sayName()   #直接调用函数,不用加”my."

5. if__name__ == '__main__':

别的文件里面导入这个python文件的话,就不执行下面的代码

执行自身文件会被执行

1)   tool.py文件最下边写上下边内容

if__name__ == '__main__':print(strTotimestamp())

print(clean_log('.'))

print(clean_log('.',2))

2)

单独右键执行tools.py文件,则下边文件内容会执行,直接执行

print(strTotimestamp())

print(clean_log('.'))

print(clean_log('.',2))

3)   某个文件比如d.py,导入tools模块,执行d.py文件时,if __name__ == '__main__'下边的内容不会被执行

import

tools

则下边内容不会被执行

print(strTotimestamp())

print(clean_log('.'))

print(clean_log('.',2))

redis:一种非关系型数据库

1.关系型数据库和非关系型数据库

关系型数据库:用数据库、表存数据,表之间通过id相互关联,数据是存在磁盘上的

传统的关系型数据库:mysql、oracle、sql server

database

table1 user  userid

table2 account   userid

table3  order

userid

sql语句来操作数据

非关系型数据库、NOSQL

数据是存在内存里面,比较快

不需要通过sql语句来查询数据

传统的非关系型数据库:MongoDB(数据存在磁盘上)、redis、memcache

非关系型数据库存储数据是key = vaule形式

2.Python代码操作数据库

import redis #导入模块

ip = '***.**.*.**'password='******'r= redis.Redis(host=ip,password=password,port=6379,db=10,

decode_responses=True)#连接redis#db=10 表示使用第几个数据库,默认是第0个#decode_responses=True 表示返回数据是字符串#string类型#增 set(key,value)#删 delete(key)#修改 set(key,value)#查 get(key)

r.set('nhy_sessionn','sdfsdfssd',30) #30指过期释放时间30s

r.set('nhy_info','{"name":"xxxx","password":"123456","account":11234}')

r.delete('nhy_info') #删一个不存在的key,不报错

res = r.get('nhy_info')

r.flushall()#清空所有数据库里面的数据

r.flushdb() #只清空当前数据库里面的数据

r.keys() #获取到所有的key

r.keys('*session*') #模糊匹配,获取到包含session的key

r.expire('qml_session',30) #指定过期时间,过期之后就释放了

#哈希类型hash#两层嵌套,外边一个大key,里边有小key#'nhy_info','{"name":"xxxx","password":"123456"}#增 r.hset(大key,小key,value)#删 r.delete(大key) r.hdel(大key,小key)#修改 r.hset(大key,小key,value1)#查 r.hgetall(大key) r.hget(大key,小key)

r.hset('sms_code','18612532945','121213')#set值,两个小key不同

r.hset('sms_code','18612532941','121313')

r.delete('sms_code') #把整个key删除掉

r.hdel('sms_code','18201034732') #删除指定的key

r.hgetall('sms_code') #获取到这个key里面所有的内容,一个字典

{'18612532945': '121213', '18612532941': '121313'}

r.hget('sms_code','18201034732') #获指定key值,一个字符串

#r.type(key) 获取key的类型string hash

r.type('sms_code')

r.type('lyl_session007')

3. 练习要把a redis里面的数据 全部到迁移到b redis

#1、连上2个redis

#2、先从a redis里面获取到所有key

#3、然后判断key是什么类型,根据类型来判断使用什么方法

#4、从aredis里面获取到数据,set 到b redis里面

importredis

ip= ***.**.*.**'password='*****'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 inall_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 inhash_data.items():

r2.hset(k,key,v)

excel操作:

命令行执行下边命令,安装模块

pip install xlrd   #读excel

pip install xlwt   #写excel

pip install xlutils  #修改excel

写excel:

一个一个单元格写入,行号从0开始,列号从0开始

import xlwt #导入修改模块

book = xlwt.Workbook() #新建一个excel

sheet = book.add_sheet('sheet1') #添加一个sheet页

stu_info =[

['编号','姓名','密码','性别','地址'],

[1,'machunbo','sdfsd23sdfsdf2','男','北京'],

[2,'machunbo2','sdfsd23sdfsdf2','男','北京'],

[3,'machunb3','sdfsd23sdfsdf2','男','北京'],

[4,'machunbo4','sdfsd23sdfsdf2','男','北京'],

[5,'machunbo5','sdfsd23sdfsdf2','男','北京'],

[6,'machunbo6','sdfsd23sdfsdf2','男','北京'],

[7,'machunbo6','sdfsd23sdfsdf2','男','北京'],

[8,'machunbo6','sdfsd23sdfsdf2','男','北京'],

[9,'machunbo6','sdfsd23sdfsdf2','男','北京'],

[10,'machunbo6','sdfsd23sdfsdf2','男','北京'],

[11,'machunbo6','sdfsd23sdfsdf2','男','北京'],

]#sheet.write(行号,列号,写入的字符串)#方法1:自定义变量,利用变量+1控制行列循环写入

row = 0 #行

for stu instu_info:

col= 0 #列

for s in stu: #控制列

sheet.write(row,col,s) #0 3 男

col+=1row+=1

#方法2:利用列表、元组的下标写入,#mysql数据库查询数据是二维元组,可以写入excel

for index,value inenumerate(stu_info):#enumerate() 表示取到下标和值 index:下标 value:值,表示取到每行#index:0 value: ['编号','姓名','密码','性别','地址']#index:1 value: [1,'machunbo','sdfsd23sdfsdf2','男','北京']

for index2,v2 in enumerate(value):#再把每行按下标拆分列表#index2:0 v2: '编号'#index2:1 v2: '姓名'

sheet.write(index,index2,v2)

book.save('stu3.xls')#保存excel wps:文件名后缀是 xls或xlsx,微软的office后缀必须是xls

读excel

import xlrd #导入读excel模块

book = xlrd.open_workbook('stu3.xls')#打开需要读取的文件

sheet = book.sheet_by_index(0)#打开需要读取的sheet页#sheet = book.sheet_by_name('sheet1')#sheet页可以通过序号读取,也可以通过名称读取

sheet.cell(0,0).value#获取指定单元格的内容,0行0列的单元格

sheet.cell(1,0).value

sheet.row_values(0)#获取整行的数据,0行,结果为列表#['id', '姓名', '密码', 'password', '地址']

sheet.row_values(1)#1行

sheet.col_values(0)#获取整列的数据,0列,,结果为列表

sheet.col_values(1)#1列

sheet.nrows#行数

sheet.ncols #列数

for row in range(1,sheet.nrows):#按行读取excel表内容

print(sheet.row_values(row))

修改excel

#1、先打开原来的excel#2、复制一份#3、在复制的excel上修改#4、保存

import xlrd #导入读取excel模块

from xlutils import copy #导入修改excel模块,直接使用copy方法

book = xlrd.open_workbook('stu3.xls')

new_book= copy.copy(book) #复制原来的excel

sheet = new_book.get_sheet(0) #在复制的excel上修改,获取sheet页得用get_sheet()

sheet.write(0,0,'id')#直接使用write(行号,列号,值)进行修改

sheet.write(0,3,'password')

new_book.save('stu3.xls')#保存文件,文件名必须与原文件名一致

接口开发:

使用flask模块,web框架,mock(模拟)服务,创建服务

服务里边创建接口

接口URL中传入参数,根据参数执行python代码,返回数据

1.简单流程

import flask #导入flask模块

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

@server.route('/login',methods=['get'])defhello():#函数紧挨着上边添加@server.route(),表示这个函数变成一个接口

#‘login’,表示访问路径是 ip:8000/login

#methods=['get']表示访问url方法是get

return 'hello'server.run()#启动这个服务

#执行该脚本

浏览器访问路径:http://127.0.0.1:5000/login

后边路径与创建接口时写的路径一致

2.指定ip端口号启动服务

server.run(host='0.0.0.0',port=8999,debug=True)#启动服务

#若ip是127.0.0.1,只能本机访问#指定0.0.0.0,同一局域网的其他人也可以访问这台机器#比如本机ip是172.16.104.12,同一局域网内的其他人可以访问172.16.104.12

#port=8999表示指定端口号是8999

#debug=True表示修改代码之后自动重启服务

#访问路径是http:// 172.16.104.12:8999/login

说明:再次启动服务不能直接运行python文件,一定要点击重新运行按钮,否则旧服务没有停止,提示端口被占用

3. 如何从url中获取参数

@server.route('/login',methods=['get'])defhello():

uname= flask.request.values.get('username')#从url中获取username的值

pd = flask.request.values.get('passwd')#从url中获取passwd的值

return '%s %s'%(uname,pd)

重新启动服务

浏览器访问路径:

http://172.16.104.12:8999/login?username=hudonglian&&passwd=123456

4.一个服务创建多个接口

5.练习:使用接口访问数据库,登录功能

import flask #导入flask模块

import tools #里边包含连接数据库,md5加密函数

importjson

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

@server.route('/login',methods=['get'])defhello():

uname= flask.request.values.get('username')#从url中获取username的值

pd = flask.request.values.get('passwd')#从url中获取passwd的值

sql = 'select * from app_myuser where username="%s";'%uname

res=tools.my_db(sql)ifres: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)#将返回的字典变成json串

redis java excel_7.redis excel读写相关推荐

  1. Redis——Java连接Redis

    Java连接redis,首先修改两项配置文件 bind 127.0.0.1 ::1 注释掉 protected-mode 设置为no 然后需要导入一个依赖 <!--redis--> < ...

  2. redis java客户端配置,Java的Redis客户端选择-jedis与Lettuce

    Lettuce 和 Jedis 的定位都是Redis的client,所以他们当然可以直接连接redis server. Jedis在实现上是直接连接的redis server,如果在多线程环境下是非线 ...

  3. Java:apache.poi读写Excel文件

    依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</ar ...

  4. 四、EasyExcel实现Excel读写,封装工具类

    在项目中,我们经常用到EasyExcel框架实现:对Excel文件的读写操作.为了方便后续其他项目中的使用,将对Excel文件的读写操作,封装成工具类. 一.EasyExcel实现Excel读写,封装 ...

  5. redis 2m数据读取_Flink读写Redis(二)读取redis数据

    自定义flink的RedisSource,实现从redis中读取数据,借鉴了flink-connector-redis_2.11的实现思路,对redis读取操作进行封装,其中flink-connect ...

  6. java redis remove_最全的Java操作Redis的工具类

    RedisUtil 当前版本:1.1 增加更全的方法,对以前的部分方法进行了规范命名,请放心替换成新版本. 介绍 最全的Java操作Redis的工具类,使用StringRedisTemplate实现, ...

  7. Java开发 - Redis初体验

    前言 es我们已经在前文中有所了解,和es有相似功能的是Redis,他们都不是纯粹的数据库.两者使用场景也是存在一定的差异的,本文目的并不重点说明他们之间的差异,但会简要说明,重点还是在对Redis的 ...

  8. Redis Java客户端的选择

    Redis的Java客户端很多,官方推荐的有三种:Jedis.Redisson和lettuce. 在这里对Jedis和Redisson进行对比介绍 Jedis: 轻量,简洁,便于集成和改造 支持连接池 ...

  9. 2021-3-20 狂神说java之 redis学习

    Nosql概述 Nosql = not only sql (不仅仅是SQL) 泛指非关系型数据库 关系型数据库:表格,行,列 很多的数据类型用户的个人信息,社交网络,地理位置.这些数据类型的存储不需要 ...

最新文章

  1. php与c 哪个好,C语言和PHP,新手选择哪个比较好?
  2. 通过eclipse调试MapReduce任务
  3. 使用 shell 脚本对 Linux 系统和进程资源进行监控
  4. Chapter 3 Phenomenon——24
  5. 1109 Group Photo (25 分)【难度: 一般 / 知识点: 模拟 排序】
  6. 剑指offer-11.数值的整数次方实现power
  7. 【英语学习】4000 Words 【V1】【U02】The Laboratory
  8. 几行代码,轻松带你实现Java生成二维码功能!
  9. Hibernate与MyBatis的区别
  10. httpd的一些知识点
  11. SUSE Labs Con 2018有感
  12. 数据结构和算法9——哈希表
  13. 二十四、JAVA集合框架(三)
  14. python语法分析图_Python的抽象语法树(二)
  15. cisco链路聚合配置
  16. 最全的LBS手机定位技术说明
  17. 电子邮件反垃圾邮件软件的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. 印度体育教育初创公司 KOOH Sports 获得 220 万美元风险投资
  19. 微信小程序 导入excel文件
  20. Python编写尼姆游戏

热门文章

  1. MacOS配置C++开发环境
  2. 服务器系统2008如何共享打印机,Windows SBS 2008实战之管理共享打印机
  3. 2022(核酸年)结束了
  4. 二维dct变换例题_图象题处理习题
  5. SAP ABAP BDC(批量数据通信)-018
  6. 蓄电池内阻的检测技术
  7. 用友YonSuite荣膺2020中国企业服务SaaS年度产品创新奖
  8. 关于c语言如何判断日期是否合法?\\有这样的日期吗?
  9. 人生若只如初见,何事秋风悲画扇。
  10. 你活着的意义是什么?(灵魂拷问)