模块 一个python文件就是一个模块

有三种模块:

1、标准模块---不需要你单独安装,python自带的模块 time/os/json/datetime/random....

2、第三方模块

3、自己写的python

安装第三方模块

1、在线安装

pip install xxx2、自己下载压缩包安装2.1.tar.gz结尾的压缩包 先解压,再到目录下安装

python setup.py install2.2.whl 结尾的压缩包

pip install xxx.whl

一、random模块

importrandomprint(random.randint(100000,100000000)) #随机取一个整数,包含头和尾 range--顾头不顾尾 可用于随机生成验证码 61407198

print(random.uniform(1,900)) #随机取一个小数 652.1150991637816

stu=['xiaojun','xinxin','xiuxian','lixin','weiwei','wangying']print(random.choice(stu)) #随机取一个元素 传入参数只要可循环即可 string/list/dic/truple/set....

print(random.sample(stu,3)) #随机取n个元素

list=list(range(1,11))print('洗牌前的list:',list) #洗牌前的list: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

random.shuffle(list) #洗牌 此方法没有返回值 只能传list,因为string和元组不能改变;字典和集合天生就是无序的,不用打乱

print('洗牌后的list:',list) #洗牌后的list: [9, 3, 5, 6, 2, 7, 8, 10, 1, 4]

二、os模块

importos

os.rename(old,new)#文件重命名

os.remove() #删除文件

os.mkdir('directory') #创建文件夹 父目录不存在会报错

os.mkdir('directory/python') #FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'directory/python'

os.makedirs('directory2/python') #创建文件夹 父目录若不存在会先创建父目录

os.removedirs('directory2') #只能删空文件夹 OSError: [WinError 145] 目录不是空的。: 'directory2'

print(os.listdir('d:\\')) #显示该目录下面的所有文件和文件夹 不传参数时,就显示当前目录下的文件和文件夹

print(os.path.isdir('directory'))#判断是否是文件夹

print(os.path.isfile('os模块.py')) #判断是否是文件

print(os.path.exists('os模块.py')) #判断文件是否存在

os.walk('D:\PycharmProjects') #列出目录下所有的文件和文件夹,会递归列出所有子文件夹中的文件

#用os.walk()统计文件个数 统计d盘下面有多少个python文件

res = os.walk(r'D:\PycharmProjects') #r--不转义特殊字符

count=0for cur_path,dirs,files in res: #循环返回三个参数 c--当前循环的目录 d--当前目录中有哪些文件夹 f--当前目录下有哪些文件

for f infiles:if f.endswith('.py'):

count+=1

print(count)#用os.walk方法查找文件

deffind_file(path,keyword):

res=os.walk(path)for cur_path,dirs,files inres:for file_name infiles:if keyword infile_name:print('该文件在%s下面'%cur_path)

res=os.system('ipconfig') #执行操作系统命令 只执行命令,没有结果 os.system('dir') 查看当前目录有哪些东西

print('os.system命令返回结果:',res) #os.system命令返回结果: 0

os.popen()#执行操作系统命令 有返回值 需调用reda()方法读取结果

res1= os.popen('ipconfig').read()print('os.popen返回结果:',res1) #os.popen返回结果: Windows IP 配置 ......

os.path.join()#拼接路径 不同的系统会自动匹配不同的路径分隔符

print(os.path.join('china','guangdong','zhuhai')) #china\guangdong\zhuhai

print(os.path.split(r'D:\PycharmProjects\jnz\for循环.py')) #分割路径和文件名 ('D:\\PycharmProjects\\jnz', 'for循环.py')

print(os.path.dirname(r'D:\PycharmProjects\jnz\for循环.py')) #取父目录 (即上一层目录) D:\PycharmProjects\jnz

print(os.path.getsize(r'D:\PycharmProjects\jnz\for循环.py')) #取文件的字节数 327 单位是字节 可用来判断文件是否为空

print(os.getcwd()) #取当前目录 D:\PycharmProjects\day4\day6

print(os.chdir('D:\PycharmProjects\jnz')) #进入到哪个目录下

三、time模块

#和时间相关的操作

importtime#time.sleep(60) #等待

#两种表示时间的方式#1、格式化好的时间 20180915 14:09:20 便于阅读#2、时间戳 从计算机诞生那天到现在过了多少秒,便于计算时间

#计算50天后的时间 50*24*60*60 + 当前时间戳

#获取当前格式化时间#年 Y可大写(2018)或小写y(18) 月--m 日--d小写 时--H 分--M 秒--S 都是大写#中间的连接符是自定义的,也可不要

res=time.strftime('%Y-%m-%d %H:%M:%S')print(res) #2018-09-16 11:26:44

#获取当前时间戳 精确到毫秒(不想要小数点后的内容可以用int()强制转换一下)

res =time.time()print(res) #1537068404.7712967

#两种时间方式相互转换,需借助时间元组

#一、格式化时间换成时间戳#格式化时间--->时间元组--->时间戳

time_tuple=time.strptime('2122-01-02 19:23:59','%Y-%m-%d %H:%M:%S') #time.strptime先把格式化好的时间转成时间元组

res=time.mktime(time_tuple) #time.mktime()

print(res) #2018-09-16 11:33:09

#封装函数---- 将格式化时间换成时间戳#不传参数返回当前时间戳

def str_to_timestamp(time_str=None,format='%Y%m%d%H%M%S'):iftime_str:

time_tuple= time.strptime(time_str, format) #先把格式化好的时间转成时间元组

timestamp=time.mktime(time_tuple)else:

timestamp=time.time()returnint(timestamp)print(str_to_timestamp()) #1537069232

print(str_to_timestamp('20561123195940')) #2742206380

print(str_to_timestamp('2056-11-23 19:59:40','%Y-%m-%d %H:%M:%S')) #2742206380

#时间戳转换成格式化时间#时间戳--->时间元组--->格式化时间#time_tuple=time.gmtime(time.time()) #把当前时间戳转时间元组,标准时区#time_tuple=time.localtime(time.time()) #把当前时间戳转时间元组,当前时区

time_tuple=time.gmtime(98765433) #把时间戳转时间元组,当前时区

res2 = time.strftime('%Y-%m-%d %H:%M:%S',time_tuple)print(res2) #1973-02-17 02:50:33

#封装函数----时间戳转换成格式化时间#如果不传时间戳的话,那么久返回当前格式化时间

def timestamp_to_strtime(timestamp=None,format='%Y-%m-%d %H:%M:%S'):iftimestamp:

time_tuple=time.localtime(timestamp)

str_time=time.strftime(format, time_tuple)else:

str_time=time.strftime(format)returnstr_time

fifty= str_to_timestamp()+50*365*24*60*60res=timestamp_to_strtime(fifty)print('50年后的时间是%s'%res) #50年后的时间是2068-09-03 11:53:20

四、hashlib加密模块

importhashlib

password='123456'pwd=password.encode() #字符串转成二进制类型才能加密 b'123456'

m= hashlib.md5(pwd) #md5加密方式 一般都用md5加密#m = hashlib.sha1(pwd) #其他加密方式 密码长度更长,更安全#m = hashlib.sha224(pwd)#m = hashlib.sha256(pwd)

print(dir(m)) #模块中有哪些方法 dir()方法可以查看该模块有哪些方法

print(m.hexdigest()) #e10adc3949ba59abbe56e057f20f883e MD5加密后的密码都是32位的(不管加密前有多长)

#MD5加密是不可逆的 即加密后不能再解密到明文

#撞库---将常见简单密码加密后的结果保存起来,和明文对应

#加盐#明文密码 + 随机产生一个字符串 然后再加密

#封装函数---用MD5加密

def my_md5(s,salt=None):

s=str(s)ifsalt:

s=s+salt

m=hashlib.md5(s.encode())return m.hexdigest()

五、第三方模块

(1)xpinyin模块

importxpinyin

s=xpinyin.Pinyin() #实例化

print(s.get_pinyin('山竹来啦')) #shan-zhu-lai-la 默认用-把每个拼音连接

print(s.get_pinyin('山竹来啦','')) #shanzhulaila

(2)pymysql模块

importpymysql

host='118.24.3.40'user='jxz'password='123456' #密码只能是字符串类型

db='jxz'port= 3306 #端口号只能写int类型

charset ='utf8' #只能写utf8 防止插入数据库时出现乱码

#建立连接

conn=pymysql.connect(host=host,password=password,user=user,db=db,port=port,charset=charset,autocommit=True)#建立游标

cur =conn.cursor()

sql='select * from app_myuser limit 5;'cur.execute(sql)#只执行sql语句,不返回结果#print(cur.description) #获取表结构信息(表里有哪些字段及字段类型...)

print(cur.fetchall()) #获取sql执行后得到的所有结果 返回结果是一个二维数组,每一条数据都是数据库里的一条记录; cur.fetchall(cursor=pymysql.cursors.DictCursor),返回list,list里面是一个个字典,每一条数据一个字典#((1145, 'liuyana001', '123456', 1), (1146, 'xd', '123456', 1), (1147, '颜无柳', '1', 1), (1148, 'pythonnjf', '123456', 1), (1149, 'gebilaowang', '123456', 1))#print(cur.fetchone()) #获取sql执行后得到的一条结果 (1145, 'liuyana001', '123456', 1)

#sql='insert into app_myuser(username,passwd,is_admin) VALUE ("hahaha","456789","0") '#cur.execute(sql)#conn.commit() #select、update需要commit提交 或者在conn中添加 autocommit=True自动提交

cur.close()#执行完sql后必须关闭连接

conn.close()#封装函数---连接数据库

def my_db(ip,user,password,db,sql,port=3306,charset='utf8'):

conn= pymysql.connect(host=ip, password=password, user=user, db=db, port=port, charset=charset, autocommit=True)

cur=conn.cursor()

cur.execute(sql)

res=cur.fetchall()

cur.close()

conn.close()return res

(3) xlwt、xlrd、xlutils模块

importxlwt,xlrd,xlutils#写Excel

book=xlwt.Workbook()

sheet= book.add_sheet('sheet1')

sheet.write(0,0,'id') #0行0列 id

sheet.write(0,1,'username') #0行1列 username

sheet.write(0,2,'password') #0行2列 passname

sheet.write(1,0,'1')

sheet.write(1,1,'hahaha')

sheet.write(1,2,'123456')

sheet.write(2,0,'2')

sheet.write(2,1,'lihui')

sheet.write(2,2,'123456')

book.save('stu.xls')

stus=[

[1,'njf','1234'],

[2,'xiaojun','1234'],

[3,'hailong','1234'],

[4,'xiaohei','1234'],

[4,'xiaohei','1234'],

[4,'xiaohei','1234'],

[4,'xiaohei','1234'],

[4,'xiaohei','1234'],

[4,'xiaohei','1234'],

]#循环往Excel表中写内容 2层循环

row=0 #控制行

for stu instus:

colum= 0 #控制列

for i instu:

sheet.write(row,colum,i)

colum+=1row+=1book.save('stu.xls') #最后要保存 excel文件名要以xls结尾,xlsx微软打不开

#用emumerate()函数

for row ,data inenumerate(stus):for col ,val inenumerate(data):

sheet.write(row,col,data)

book.save('stu.xls')#读Excel

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

sheet= book.sheet_by_index(0) #根据下标编号获取Excel

sheet = book.sheet_by_name('sheet1') #根据sheet名称获取sheet

print(sheet.nrows) #excel里面有多少行

print(sheet.ncols) #excel里面有多少列

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

print(sheet.cell(0,1).value) #获取到指定单元格的内容

print(sheet.row_values(0)) #获取到整行的内容

print(sheet.col_values(0)) #获取到整列的内容

#循环打印Excel中每行的内容

for i inrange(sheet.nrows):print(sheet.row_values(i))#修改Excel

from xlutils importcopy

book= xlrd.open_workbook('stu.xls') #1、现有xlrd打开一个Excel

new_book = copy.copy(book) #2、用xlutils中的copy功能,复制一个excel

sheet =new_book.get_sheet(0) #获取sheet页

sheet.write(0,1,'小白')

sheet.write(2,0,'小军')

new_book.save('stu.xls')

(4)itsdagerous模块

cookie和session保存在内存中保存和取出时需要操作数据库redis,效率低;

用itsdangerous模块不需要保存

importitsdangerous

salt='$Sdfht't= itsdangerous.TimedJSONWebSignatureSerializer(salt,expires_in=30)#salt 加盐; expires_in 超时时间

#加密

res = t.dumps({'maxiaoma':'machenxi','user_id':1})

token=res.decode()print(token)#解密

res=t.loads('eyJhbGciOiJIUzUxMiIsImlhdCI6MTU0MTgyMDAxNCwiZXhwIjoxNTQxODIwMDQ0fQ.eyJ1c2VyX2lkIjoxLCJtYXhpYW9tYSI6Im1hY2hlbnhpIn0.hrEFz5Z4iJLOdDNVsridqY1hdb5lbWmj6gLY-kVAC8vtVj0ZqaX_SehWTG4eC8RkgFpMZ3hwiDsdaG8XLDWXVw')print(res)

(5) glob模块

用于过滤出符合特定规则的文件路径名,跟使用windows下的文件搜索差不多

glob.glob 返回所有匹配的文件路径列表,它只有一个参数pathname,定义了文件路径匹配规则,这里可以是绝对路径,也可以是相对路径。

importglob#打印出 D:\PycharmProjects\day4 文件夹下所有的python文件的路径,返回的是一个list

print(glob.glob(r'D:\PycharmProjects\day4\*.py'))#['D:\\PycharmProjects\\day4\\productManage.py', 'D:\\PycharmProjects\\day4\\t.py']