print(max([1,2,3,4])) #获取最大值
print(sum([1,2,3,4])) #求和
print(math.pi) #圆周率的值
print(chr(65)) #把数字转成ascii码表里对应的值
print(ord(‘A‘)) #把字母转为ascii码表里对应的数字
print(dir(bool)) #查看某个对象里有哪些方法
bool() #转bool类型,返回True或False
sorted(s,reverse=True) #排序,返回排序后的值,用list存储,reverse=True则降序排序,字母用ascii码来判断
print(sorted({‘b‘:1,‘a‘:2})) #传入字典,用key来排序,返回key排序后组成的list
print(list(reversed(‘1345dd‘))) #反转,可以转成list
for n,m in zip(name,money): #zip把多个list揉到一起,变成一个二维数组,可以用这种形式来循环获取元素
print(list(zip(name,money))) #输出[(‘nhy‘, 100), (‘lyl‘, 22), (‘qlm‘, 45)]
eval(‘‘) #执行一些简单的python代码:运算,定义变量,传入字符串
exec("print(‘ss‘)") #执行复杂的python代码
map 帮你循环调用函数,传入函数名称和存放变量的列表
filter 帮你循环调用函数,如果函数返回false,则过滤掉(传入的list里过滤,返回剩下的)
#map用法示例 def intToStr(num): return str(num).zfill(2) l=range(1,34) res=map(intToStr,l) #循环调用 print(list(res))
#lambda #匿名函数,功能很简单的一个函数,用完一次就释放
#lambda示例 a=lambda num:str(num).zfill(2) #冒号前面是入参,后面是返回值 print(a(1)) l=[2,34,5] print(list(map(lambda num:str(num).zfill(2),l)))
一个小例子,输出结果如下,可以看出map和filter的区别
[False, True, False, True, False, True, False, True, False]
[2, 4, 6, 8]
print(list(map(lambda num:num%2==0,range(1,10)))) print(list(filter(lambda num:num%2==0,range(1,10))))
os模块的walk函数可以用来循环遍历指定路径下的所有文件和文件夹
代码小示例,遍历e盘,并打印所有路径下的文件和文件夹
import os for cur_path, cur_dir, cur_files in os.walk(r‘e:\‘): print(‘当前路径‘, cur_path) print(‘当前目录下有哪些文件夹:‘, cur_dir) print(‘当前目录下有哪些文件:‘, cur_files)
找出e盘下所有.mp4文件
#找出e盘下所有以.MP4结尾的的文件 def find_movie(keyWord,path=‘e:\\‘): for cur_path, cur_dir, cur_files in os.walk(path): for file in cur_files: if file.endswith(keyWord): print(‘当前路径:‘,cur_path) print(‘文件:‘,file) find_movie(‘mp4‘,r‘E:\1.个人资料‘)
hashlib模块下的md5方法可以对传入的字符串进行md5加密,必须传入一个encode后的字符串
md5加密不可逆,无法解密,破解只能用撞库的方式,因此,md5加密时,可以采用加盐的方式来加密,多传入一个自定义的字符串,和待加密的字符串拼接在一起再进行加密,这样可以减少被撞库成功的风险
重点方法:hashlib.md5(s).hexdigest
代码示例:
def my_md5(s,salt=‘‘): s_new=(str(s)+salt).encode() #必须传入encode后的字符串 m=hashlib.md5(s_new).hexdigest()#获取加密后的字符串 return m s=‘123456Aaaa‘ print(my_md5(s,‘abc‘)) print(my_md5(123))
输出:
5b701ee50c069926c768466035117c76
202cb962ac59075b964b07152d234b70
1.获取数据库连接,使用pymysql.connect方法,传入参数要使用key=value形式,例如:
conn=pymysql.connect(host=‘xx.xx.xx.xx‘,user=‘xxx‘,password=‘xxx‘,port=3306,db=‘jxz‘,charset=‘utf8‘,autocommit=‘True‘ )
2.建立游标,相当于仓库管理员,cur=conn.cursor()
3.执行sql语句,cur.execute(sql),只是执行sql,不会返回数据
4.insert和update语句提交后需要commit ,连接数据库时加上autocommit=‘True‘就可以不写这句:conn.commit()
4.获取提交sql后的返回数据,cur.fetchall()#获取到所有返回的数据,二维数组;cur.fetchone() #只获取一条数据,一维数组
5.代码示例,一个操作数据库的函数,传入sql和连接信息
def my_db(sql,host, user, password, db,port=3306,charset=‘utf8‘,autocommit=‘True‘): conn = pymysql.connect(host=host, user=user, password=password,db=db, port=port, charset=charset,autocommit=autocommit) cur = conn.cursor() # 建立游标,相当于仓库管理员 cur.execute(sql) res=cur.fetchall() cur.close() conn.close() return res
6.代码示例,使用fetchone循环打印select的每一个结果
import pymysql conn=pymysql.connect(host=‘192.168.4.78‘,user=‘jxz‘,password=‘123456‘,port=3306,db=‘jxz‘,charset=‘utf8‘,autocommit=‘True‘ ) cur=conn.cursor() #建立游标,相当于仓库管理员 sql=‘select * from app_myuser;‘ cur.execute(sql)#只是执行sql,不会返回数据 # print(cur.fetchall())#获取到所有返回的数据,二维数组 a=cur.fetchone() while a: #只获取一条数据,一维数组 print(a) a=cur.fetchone() cur.close() conn.close()
1.写一个函数,传入一个路径和一个关键字(关键字是文件内容),找到文件内容里面有这个关键字的文件
# 需求: # 1、写一个函数,传入一个路径和一个关键字(关键字是文件内容),找到文件内容里面有这个关键字的文件 import os import chardet def find_file(keyWord,path=‘e:\\‘): files=[] #定义一个数组,来存放包含关键字的文件 for cur_path, cur_dir, cur_files in os.walk(path): #遍历指定的路径下的所有文件和文件夹 for file in cur_files: if file.endswith(‘txt‘): with open(os.path.join(cur_path,file))as fr: content=fr.read() if content.upper().find(keyWord.upper()) != -1: # 文件内容是否包含关键字,忽略大小写 files.append(‘path=%s filename=%s‘ % (cur_path, file)) # 包含,加入到files中 return files res=find_file(‘文件‘,r‘D:\工作文档\个人‘) print(res)
2.写一个清理日志的程序,把三天前的日志删掉,保留今天的、昨天和前天的。文件格式:ios_2018-11-21.log
# 2、写一个清理日志的程序,把三天前的日志删掉, # 保留今天的、昨天和前天的。 # 文件格式:ios_2018-11-21.log import os import time #时间戳转格式化时间 def timestampToStr(timestamp=None,format=‘%Y-%m-%d %H:%M:%S‘): if timestamp: time1=time.gmtime(timestamp) #时间戳转换为时间元组, res = time.strftime(format, time1) # 时间元组转成格式化时间 else: res = time.strftime(format) # 获取当前格式化的时间 return res #格式化时间转时间戳 def strTotimestamp(str=None,format=‘%Y-%m-%d %H:%M:%‘): if str: timep = time.strptime(str, format) # 格式化时间先转成时间元组 res = time.mktime(timep) else: res=time.time() #获取当前时间戳 return int(res) #日志时间是否过期 def is_outTime(s): if s.endswith(‘.log‘): #传入的是一个日志文件 log_time= s.split(‘.‘)[0].split(‘_‘)[1].replace(‘-‘,‘‘)+‘000000‘ log_timestamp=strTotimestamp(log_time,‘%Y%m%d%H%M%S‘)#解析日志时间当天0点的时间戳 today_date=timestampToStr().split(‘ ‘)[0] today_timstamp=strTotimestamp(today_date.replace(‘-‘,‘‘)+‘000000‘,‘%Y%m%d%H%M%S‘)#获取今天零点的时间戳 if today_timstamp-log_timestamp>259200: #日志时间在三天内 return True #删除符合条件的日志文件 def delLogs(path=‘..‘): #默认操作路径是当前文件的上层路径 files=[] for cur_path,cur_dir,cur_files in os.walk(path): #遍历传入的文件路径 for file in cur_files: if is_outTime(file): os.remove(os.path.join(cur_path,file)) #删除文件 files.append({"path": cur_path, "filename": file}) return files #返回所有已删除的文件名称和所在路径 print(delLogs())
3.写一个注册的功能,要求数据存在数据库里面名字为空、已经存在都要校验,校验通过之后,密码要存成md5加密的。
# 需求: # 写一个注册的功能,要求数据存在数据库里面 # 1、名字为空、已经存在都要校验 # 2、校验通过之后,密码要存成密文的。 import pymysql import hashlib HOST=‘192.168.4.78‘ DB=‘jxz‘ def my_db(sql,host,user,passwd,db,port=3306,charset=‘utf8‘,autocommit=‘True‘): conn=pymysql.connect(host=host,user=user,passwd=passwd,db=db,port=port,charset=charset,autocommit=autocommit) cur=conn.cursor() cur.execute(sql) res=cur.fetchall() cur.close() conn.close() return res def write(user): sql="insert into lyc_user(username,password)VALUES (‘%s‘,‘%s‘)"%(user[‘username‘],user[‘password‘]) my_db(sql,host=HOST,user=‘jxz‘,passwd=‘123456‘,db=DB) def get_userinfo(): sql="select * from lyc_user" res=my_db(sql,host=HOST,user=‘jxz‘,passwd=‘123456‘,db=DB) if res: users_info=[{‘username‘:i[1],‘password‘:i[2]} for i in res] #将读取出来的用户信息用字典格式存储,放到一个列表里 else: users_info=[] return users_info #返回数据库里的用户信息 def my_md5(s,salt=‘‘): #对密码进行md5加密 s_new=(str(s)+salt).encode() m=hashlib.md5(s_new).hexdigest() return m def sigh(): users_info = get_userinfo() count=0 while count<3: name_input = input("欢迎注册,请输入用户名:").upper() password_input = input("请输入密码:") cpassword_input = input("请确认密码,请与上次输入密码保持一致:") if name_input.strip() == "" or password_input.strip() == "" or cpassword_input.strip() == "": print("用户名或密码为空,请重新输入") # 判断用户名和密码是否输入为空 count+=1 continue elif password_input != cpassword_input: print("两次输入的密码不一致,请重新输入") count+=1 continue elif name_input in [i[‘username‘] for i in users_info]: print("用户名已存在,请直接登录") count+=1 break else: # 将注册结果写入数据库 password_input=my_md5(password_input,‘lyc‘) user={"username":name_input,"password":password_input} write(user) print("注册成功") break sigh()
4.登录,登录的账号密码从数据库里面取,如果输入用户不存在要提示
# 需求: # 登录的账号密码从数据库里面取, # 如果输入用户不存在要提示 import pymysql import hashlib import datetime HOST=‘192.168.4.78‘ DB=‘jxz‘ def my_db(sql,host,user,passwd,db,port=3306,charset=‘utf8‘,autocommit=‘True‘): conn=pymysql.connect(host=host,user=user,passwd=passwd,db=db,port=port,charset=charset,autocommit=autocommit) cur=conn.cursor() cur.execute(sql) res=cur.fetchall() cur.close() conn.close() return res def get_user(): sql="select * from lyc_user" res=my_db(sql,host=HOST,user=‘jxz‘,passwd=‘123456‘,db=DB) if res: return [(i[1],i[2])for i in res] return [] #返回数据库里的用户信息,只返回username和password def my_md5(s,salt=‘‘): #对密码进行md5加密 s_new=(str(s)+salt).encode() m=hashlib.md5(s_new).hexdigest() return m def login(): users_info = get_user() count=0 while count<3: name_input = input("欢迎登陆,请输入用户名:").upper() password_input = input("请输入密码:") user_input = (name_input,my_md5(password_input,‘lyc‘)) if name_input.strip() == "" or password_input.strip() == "": print("用户名或密码为空,请重新输入") # 判断用户名和密码是否输入为空 count+=1 continue elif name_input not in [i[0] for i in users_info]:#取出所有的username print("用户不存在,请重新输入") count+=1 continue elif user_input in users_info: print("登陆成功,欢迎%s,当前时间:%s"%(name_input,datetime.datetime.today().strftime(‘%Y-%m-%d %H:%M:%S‘))) break else: print("密码错误,登陆失败") login()
Python自动化学习笔记(六)——常用内置函数、os.walk了解、md5加密、连接数据库
原文:https://www.cnblogs.com/luoyc/p/10113388.html