Python笔记五(写excel,加密模块,字典排序,常用的标准模块,操作mysql,时间模块)
1.函数返回值
函数如果返回多个值的话,他会把这几个参数值,都放到一个元组里面
函数若返回多个值的话,可以用多个变量来接收即可
1 def say(): 2 num1 = 1 3 num2 = 2 4 num3 = 3 5 return num1,num2,num3 6 res = say() 7 print(res) 8 res1,res2,res3= say() 9 print(res1,res2,res3)
2.匿名函数:
这个函数功能很简单,只用一次。 lambda定义匿名函数
1 res = lambda x:x+1 #前面X代表函数返回值,后面x+1代表函数体 2 print(res(1))
3.列表生成器
1 import random 2 red_num= random.sample(range(1,34),6) 3 #外面是小括号的话,他就不是一个list了,他是一个生成器 4 # 生成器比list要节约内存,他是每次循环的时候,会根据规则计算一个元素,放到内存里面。 5 # list他是把所有的元素都放在内存里面。 6 l = [i for i in range(1,101,2)]#生成100以内的奇数 7 new_num = [str(num).zfill(2)for num in red_num] #列表生成式 8 print(new_num) 9 print(l) 10 11 #生成器例子 12 l = (i for i in range(1,101,2)) 13 for l2 in l: 14 print(l2) 15 print(l.__next__)#表示每次打印一个值 16 17 # #下面的这一串与上面的【列表生成式】的作用一样 18 for num in red_num: 19 temp = str(num).zfill(2) 20 new_num.append(temp) 21 print(new_num) 22 23 24 # #练习一(列表生成式) 25 a = 5 26 b = 4 27 if a>b: 28 c= a 29 else: 30 c= b 31 32 c = a if a>b else b #三元表达式
4.字典排序
1 d = {'a':4,'c':2,'b':3} 2 3 #字典是无序,直接对字典排序是不存在的 4 print(d.items()) 5 print(sorted(d.items()))#sorted帮我们循环调用生成了一个二维数组,默认是按照key排序的 6 res=sorted(d.items(),key=lambda x:x[0])#根据key排序 7 res1=sorted(d.items(),key=lambda x:x[1])#根据value排序 8 print(res) 9 print(res1) 10 11 for k,v in res:#循环二维数组 12 print(k,v) 13 14 l =[ 15 [1,2,3,4], 16 [1,2,4,3] 17 ] 18 for a,b,c,d in l: 19 print(a,b,c,d) 20 21 def my(name:str): 22 print(name) 23 my(['123','456'])
5.常用标准模块
1 import os 2 print(os.getcwd())#取当前工作目录 3 os.chmod("D:\syz1\T_code1\day6",2)#给文件/目录加权限,对windows下面不好使用 4 # 1 执行 5 # 2 写 6 # 4 读 7 # chmod 加权限 8 print(os.chdir("../"))#更改当前目录 9 print(os.curdir)#当前目录 10 print(os.pardir)#父目录 11 12 print(os.makedirs("hh/h1"))#递归创建文件夹,父目录不存在时创建父目录 13 print(os.mkdir("yjy/python"))#创建文件夹 14 # makedirs创建文件夹的时候,如果父目录不存在会自动帮你创建父目录 15 #mkdir创建文件夹的时候,如果父目录不存在会报错 16 17 18 print(os.removedirs("/usr/hehe/hehe1"))#递归删除空目录 19 print(os.rmdir("test1"))#删除指定的文件夹 20 #只能删除空目录 21 22 print(os.remove("test1"))#删除文件 23 print(os.listdir('.'))#列出一个目录下的所有文件 24 os.rename("test","test1")#重命名 25 print(os.stat("len_os.py"))#获取文件信息 26 print(os.sep)#当前操作系统的路径分隔符 27 print(os.linesep)#当前操作系统的换行符 28 print(os.pathsep)#当前系统的环境变量中每个路径的分隔符,linux是:,windows是; 29 print(os.environ)#当前系统的环境变量 30 print(os.name)#当前系统名称 windows系统都是nt,linux都是posix 31 res=os.system('ipconfig') #执行操作系统命令的os.system('dir'),但是获取不到结果 32 print(res) #0代表是不是执行成功,0代表成功 显示乱码 33 res = os.popen('ipconfig').read()#执行操作系统命令,可以获取到命令执行结果,但是只能获取静态命令(top -n l 一秒去取一次) os.popen('top -n 1').read(),动态命令不可以(top) 34 print(res) 35 36 print(__file__)#获取到当前文件的绝对路径 37 print(os.path.abspath(__file__))#获取绝对路径 38 print(os.path.split("/usr/hehe/hehe.txt"))#分割路径和文件名 39 40 print(os.path.dirname("d:\\syz\\T_code1"))#获取父目录 41 print(os.path.basename("d:\\syz\\T_code1"))#获取最后一级,如果是文件显示文件名,如果是目录显示目录名 42 print(os.path.exists("/usr/local"))#目录/文件是否存在 43 print(os.path.isabs("."))#判断是否是绝对路径 44 print(os.path.isfile("/usr/local"))#判断是否是一个文件,1.文件要存在2.必须是一个文件 45 print(os.path.isdir("d:\\syz"))#是否是一个路径,目录是否存在 46 print(os.path.getsize('x.py'))#获取文件大小,可以限制上传文件的大小 47 print(os.path.join("root",'hehe','a.sql'))#拼接成一个路径 48 49 for abs_path,dir,file in os.walk('D:\syz1\T_code1\day6'):#获取目录 50 print(abs_path,dir,file) 51 # abs_path当前循环的绝对路径 52 # dir 目录下面所有的文件夹[] 53 # file目录下面所有文件[]
6.导入模块的顺序
1 # python导入模块的时候顺序: 2 # 1.从当前目录下面找需要导入的Python文件。 3 # 2.从Python的环境变量中找 sys.path(方法二:把Python文件放到C:\\Miniconda3\\DLLs目录下面) 4 # 导入模块的实质: 5 # 就是把Python文件从头到尾执行一遍 6 7 8 import sys 9 print(sys.platform)#判断操作系统 10 print(sys.path)#python的安装目录环境变量 11 print() 12 print(sys.argv)#用来获取命令行里面运行Python文件的时候传入的参数 13 14 #导入模块的两种方法 15 16 #导入当前目录下面的模块,当前目录下面创建一个y python文件 17 #方法一 18 import y 19 print(y.name) 20 y.my() 21 22 #方法二 23 from y import my,name 24 my() 25 print(name) 26 #方法三,但是不建议使用,因为方法比较多的时候不知道调用的哪个 27 from yimport * #导入所有的 28 my() 29 print(name) 30 31 #导入其他目录下面的文件 32 #如果要导入其他目录下的文件,就把这个目录加入到环境变量里面 33 sys.path.append(r'D:\syz1\T_code1\day5')#添加到环境变量里面,这个位置默认添加到最后一位 34 sys.path.insert(0,r'D:\syz1\T_code1\day5')#添加到环境变量里面第一位 35 print(sys.path) 36 import my_random #导入day5目录下面的my_random.py文件
下面是一个练习题:
1 #把双数日期的日志,里面给随便写点东西 2 # 1.获取到log目录下面的所有文件 os.walk() 3 # 2.根据文件名来判断,是否是双数日期,分割字符串,取到日期 4 # 3.取到值之后12%2==0 5 # 4.打开这个文件open(),最后写入文件 6 7 import os 8 for abs_path,dir,file in os.walk('D:\syz1\T_code1\day6\logs'):#获取目录 9 # print(abs_path,dir,file) 10 for f in file: 11 print(f) 12 day = f.split('.')[0].split('-')[2] 13 if int(day)%2==0: 14 file_name = os.path.join(abs_path,f)#拼接绝对路径 15 open(file_name,'a+',encoding='utf-8').write('写东西')
7.sys.argv 的作用是用来获取命令行里面运行Python文件的时候传入的参数,例子
1 #在命令里面运行的。如:Terminal里面运行 2 import sys,os 3 command = sys.argv 4 print(command) 5 if len(command)>1: 6 cmd1 = command[1] #因为sys.argv第一个文件名,第二个才是参数 7 if cmd1 =='--help': 8 print('这个是帮助文档''这个Python文件是用来说明sys.argv的作用') 9 elif cmd1 =='os': 10 print('当前的操作系统是%s'%sys.platform) 11 else: 12 print('输入命令有误') 13 else: 14 print('运行Python文件的时候要传入一个参数''e.g''python xx.py install')
在Terminal里面运行命令如:python 文件名.py --help 测试
8.时间模块
1 import time 2 #1.时间戳 从Unix元年到现在过了多少秒 3 #2.格式化好的时间 4 5 6 print(time.time())#获取当前时间戳 7 time.sleep(10)#停留多少秒之后在运行下面的 8 print('嘿嘿') 9 today = time.strftime('%Y-%M-%d %H:%M:%S')#获取当前日期 10 today1 = time.strftime('%Y%M%d%H%M%S')#这里的写法灵活 11 print(today) 12 print(today1) 13 14 print(time.gmtime())#默认取的的是标准时区的时间 15 print(time.localtime())#获取当前时区的时间 16 17 # 时间戳转换时间元组 18 # 1.时间戳转成时间元组time.localtime() 19 # 2.再把时间园区转化成格式化的时间 20 s = time.localtime(1514198608) 21 print(time.strftime('%Y-%M-%d %H:%M:%S',s)) 22 23 # 时间戳转换时间元组 函数写法 24 def timestamp_to_format(timestamp = None,format ='%Y-%M-%d %H:%M:%S'): 25 # 1.默认返回当前格式化好的时间 26 # 2.传入时间戳的话,把时间戳转换成格式化好的时间,返回 27 if timestamp: 28 time_tuple=time.localtime(timestamp) 29 res=time.strftime(format,time_tuple) 30 else: 31 res = time.strftime(format) 32 return res 33 print(timestamp_to_format()) 34 print(timestamp_to_format(1914198608,'%Y-%m')) 35 36 #2018-4-21怎么把格式化的时间转为时间元组的 37 38 print(time.strptime('2017-09-09','%Y-%m-%d'))#怎么把格式化的时间转为时间元组的 39 s = time.mktime(time.strptime('2017-09-09','%Y-%m-%d'))#把时间元组转成时间戳 40 print(s) 41 42 43 def strToTimestamp(str=None,format='%Y%m%d%H%M%S'): 44 #20180421165643 45 #默认返回当前时间戳 46 if str:#如果传了时间的话 47 tp = time.strptime(str,format)#转成时间元组 48 res = time.mktime(tp)#再转成时间戳 49 else: 50 res = time.time()#默认取当前的时间戳 51 52 return int(res) 53 print(strToTimestamp()) 54 print(strToTimestamp('20180421165643')) 55 print(strToTimestamp('2018-09-09','%Y-%m-%d')) 56 57 import datetime 58 datetime.datetime.today()#获取当前时间,精确到秒 59 datetime.date.today()#精确到天 60 res = datetime.date.today()+datetime.timedelta(days=-5)#获取到5天前的时间 61 res = datetime.date.today()+datetime.timedelta(days=1,minutes=5,seconds=5,weeks=5)#5秒后 62 print(res.strftime('%Y-%m-%d'))
9.加密模块
1 import hashlib 2 3 m = hashlib.md5() 4 #bytes 5 passwd = 'yjy123' 6 print(passwd.encode())#把字符串转成bytes类型 7 m.update(passwd.encode())#不能直接对字符串加密,要先把字符串转成bytes类型 8 print(m.hexdigest()) 9 10 #md5加密是不可逆的 11 12 #加密md5函数 13 def my_md5(str): 14 new_str = str.encode()#把字符串转成bytes类型 15 # new_str = b'%s'%str#把字符串转成bytes类型 16 m = hashlib.md5() #实例化md5对象 17 m.update(new_str) #加密 18 return m.hexdigest()#获取结果返回 19 20 #另外一种加密方式,加密的更长 21 m= hashlib.sha256() 22 m.update(passwd.encode()) 23 print(m.hexdigest)
10,操作mysql
1 import pymysql 2 #1.连上数据库 账号,密码 ip 端口号 数据库 3 #2,建立游标 4 #3.执行sql 5 #4.获取结果 6 #5.关闭游标 7 #6.链接关闭 8 con = pymysql.connect( 9 host='192.168.174.128', 10 user='root', 11 passwd = '123456', 12 port = 3306, 13 db ='zuoye', 14 charset = 'utf8' 15 #port必须写int类型,charset这里必须写utf8 16 ) 17 cur = con.cursor()#建立游标 18 cur.execute('insert into students(Id,Name,Sex,age,class,Addr) values(12,"hh","女",18,"胡巴","山东");') 19 #delete update insert 语句必须得commit才可以 20 con.commit()#必须得commit才可以 21 cur.execute('select * from students;')#执行sql语句 22 res = cur.fetchall()#获取所有返回的结果 23 print(res) 24 cur.close()#关闭游标 25 con.close()#关闭链接
定义函数mysql,基本不用,以后都是用封装函数
1 def my_db(host,user,passwd,db,sql,port=3306,charset='utf8'): 2 import pymysql 3 coon = pymysql.connect(user = user, 4 host = host, 5 port= port, 6 passwd = passwd, 7 db=db, 8 charset=charset 9 ) 10 11 cur = coon.cursor()#建立游标 12 cur.execute(sql)#执行sql 13 if sql.strip()[:6].upper()=='SELECT': 14 res = cur.fetchall() 15 else: 16 coon.commit() 17 res = 'ok' 18 cur.close() 19 coon.close() 20 return res
11.往excel里面写内容
1 import xlwt 2 3 book = xlwt.Workbook()#新建一个excel 4 sheet = book.add_sheet('sheet1')#加sheet页 5 sheet.write(0,0,'姓名')#行,列,写入的内容 6 sheet.write(0,1,'年龄') 7 sheet.write(0,2,'性别') 8 book.save('stu.xls')#结尾一定要用.xls