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

 

posted @ 2018-05-03 17:03  whereis  阅读(1250)  评论(0编辑  收藏  举报