今天我们来说说Python中的模块:

第三方模块

可以下载/安装/使用

第一步:将pip.exe 所在的目录添加到环境变量中
第二步:输入pip
第三步:pip install 要安装的模块名称  #pip install xlrd
报错原因:
要求更新模块:python36 -m pip install --upgrade pip  
安装成功不能导入:重启pycharm、重新安装

自定义模块

  随着程序代码越写越多,不易维护,所以我们把函数分组,放在不同的文件中,这样每个文件的代码块就较少,一个.py文件就是一个自定义模块

第一种 直接import
这里有个大前提,就是你的py执行文件和模块同属于同个目录(父级目录),如下图:

执行文件main.py 和 模块文件pwcong模块同在python目录
pwcong模块提供的函数写在 __init__.py 里,里面只提供一个 hi 函数:
def hi():
print("hi")
执行文件main.py直接import自定义模块

import pwcong
pwcong.hi()
第二种 通过sys模块导入

如果执行文件和模块不在同一个目录下,这时用import是找不到自定义模块的

import sys
sys.path.append(r"C:\Users\Pwcong\Desktop\python")
import pwcong
pwcong.hi()
第三种 通过path文件导入自定义模块

内置模块

  python内部提供的功能。

Python中的模块有下面这些:

一、序列化模块:

序列化的目的:

①:以某种存储形式使自定义对象持久化;

②:将对象从一个地方传递到另一个地方;

③:使程序更具维护性。

json模块:

json模块提供了四个功能:dumps、dump、loads、load

首先我们来说说dumps和loads:

   dumps:将JSON格式的编码内容序列化成字符串格式的

源码:
json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
1 obj: 表示是要序列化的对象。
2
3 fp: 文件描述符,将序列化的str保存到文件中。json模块总是生成str对象,而不是字节对象;因此,fp.write()必须支持str输入。
4
5 skipkeys: 默认为False,如果skipkeysTrue,(默认值:False),则将跳过不是基本类型(str,int,float,bool,None)的dict键,不会引发TypeError。
6
7 ensure_ascii: 默认值为True,能将所有传入的非ASCII字符转义输出。如果ensure_ascii为False,则这些字符将按原样输出。
8
9 check_circular:默认值为True,如果check_circular为False,则将跳过对容器类型的循环引用检查,循环引用将导致OverflowError。
10
11 allow_nan: 默认值为True,如果allow_nan为False,则严格遵守JSON规范,序列化超出范围的浮点值(nan,inf,-inf)会引发ValueError。 如果allow_nan为True,则将使用它们的JavaScript等效项(NaN,Infinity,-Infinity)。
12
13 indent: 设置缩进格式,默认值为None,选择的是最紧凑的表示。如果indent是非负整数或字符串,那么JSON数组元素和对象成员将使用该缩进级别进行输入;indent为0,负数或“”仅插入换行符;indent使用正整数缩进多个空格;如果indent是一个字符串(例如“\t”),则该字符串用于缩进每个级别。
14
15 separators: 去除分隔符后面的空格,默认值为None,如果指定,则分隔符应为(item_separator,key_separator)元组。如果缩进为None,则默认为(’,’,’:’);要获得最紧凑的JSON表示,可以指定(’,’,’:’)以消除空格。
16
17 default: 默认值为None,如果指定,则default应该是为无法以其他方式序列化的对象调用的函数。它应返回对象的JSON可编码版本或引发TypeError。如果未指定,则引发TypeError。
18
19 sort_keys: 默认值为False,如果sort_keys为True,则字典的输出将按键值排序。

例子:

 import  json
dic = {"name":"tom","age":23}
str_dic = json.dumps(dic)    序列化 将一个字典转换成一个字符串
print(type(str_dic),str_dic) json转换完的字符串类型的字典中的字符串是由""表示的

  

 import json
# 序列化,将python的值转换为json格式的字符串。
v = [12,3,4,{'k1':'v1'},True,'asdf']
print(v,type(v))
v1 = json.dumps(v)
print(v1,type(v1)) #[12, 3, 4, {"k1": "v1"}, true, "asdf"]

  loads:  将json格式的字符串转换成python的数据类型

 dic2 = json.loads(str_dic)  #反序列化:将一个字符串格式的字典转换成一个字典

 print(type(dic2),dic2)  #<class 'dict'> 

 #注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示
1 v2 = '["alex",123]'
2 print(type(v2)) #列表类型的字符串结构
3 v3 = json.loads(v2)
4 print(v3,type(v3)) #将JSON类型的编码内容反序列化成为Python的内容
5 >>> ['alex', 123] <class 'list'>
6
7 v4 = [{1,2,3},True] #不能是元组类型,只能是集合、列表、字典类型
8 ret = json.dumps(v4)
9 print(ret)

dump 和 load(文件操作相关)

 import json
f = open('json_file','w')
dic = {'k1':'v1','k2':'v2','k3':'v3'}
json.dump(dic,f)
f.close()
接收一个文件句柄,直接将字典转换成json字符串写入 import json
f = open('json_file','r')
dic2 = json.load(f)
f.close()
print(dic2,type(dic2))
接收一个文件句柄,直接将文件中的json字符串转换成字典的数据结构返回
总结:
# json.load() #参数文件句柄(r), 将文件中字符串转换成字典
# json.dump() #对象(字典),文件句柄(w) 将字典转换字符串写入到文件中
# json.dumps() #对象(字典) 将字典转换成字符串
# json.loads() #字符串(字典) 将字符串转换成字典 json的格式化输出
 import json
data = {'username':['李华','二愣子'],'sex':'male','age':16}
json_dic2 = json.dumps(data,sort_keys=True,indent=2,separators=(',',':'),ensure_ascii=False)
print(json_dic2)

结果:

 {
"age":16,
"sex":"male",
"username":[
"李华",
"二愣子"
]
}

pickle模块:只用于Python编译器

不仅可以序列化字典,列表...可以把python中任意的数据类型序列化

 import pickle
print(pickle.dumps({'':4})) #将对象转换成类似二进制的东西
print(pickle.loads(b'\x80\x03}q\x00X\x01\x00\x00\x001q\x01K\x04s.'))
#将一个堆类似于二进制的东西转换成字典 pickle.dump({'':4},open('b','wb'))
d = pickle.load(open('b','rb'))
print(d)
总结:
josn,pickle 对比: loads json里的将字符串转换成字典 pickle 将字节转换成字典
dumps json里的将字典转换成字符串 pickle 将字典转换成字节
load json里的将文件中的字符串转换成字典 pickle 将文件中的字节转换成字典
dump json里的将字典转换字符串写入到文件中,pickle 将字典转换成字节写入到文件中

shelve模块

 import shelve
f = shelve.open('c',writeback=True) #创建文件 # writeback = True 回写
f['name'] = 'alex'
f['age'] = 18
print(f['name'],f['age'])
 print(f)  # 这样是查看不了字典
8
9 for i in f:
10 print(i) #获取到所有的键
11
12 print(f.keys()) #keys也不行
13
14 for i in f:
15 print(f[i]) #获取到所有的值

二、random 模块:  随机数模块

 获取0-1之间的随机小数
import random
print(random.random())
 获取指定范围的随机小数
import random
print(random.uniform(1,5))
 获取范围内的随机整数
import random
print(random.randint(1,5))
# 起始位置,终止位置 两头都包含
 获取范围内的随机奇数和偶数:
import random
print(random.randrange(1,5,2)) #随机生成1-5的奇数
print(random.randrange(0,5,2)) #随机生成0-5的偶数
#起始位置,终止位置(不包含),步长
 print(random.choice(['alex','wusir','eva_j']))
从有序数据结构中随机选择一个
 print(random.choices(['wusir','tialaing','taihei','ritian'],k=2))
随机选择两个,但是有重复
 print(random.sample(['wusir','tialaing','taihei','ritian'],k=2))
随机选择两个,没有重复

主要应用场景:微信随机红包、验证码、随机数:

 li = [1,2,3,4,6]
random.shuffle(li) # 洗牌 打乱顺序
print(li) print(chr(65),chr(90),chr(97),chr(122)) U = chr(random.randrange(65,91))
L = chr(random.randrange(97,123))
n1 = random.randrange(0,10)
n2 = random.randrange(0,10)
print(U, L,n1,n2)

微信抢红包程序:

 import random
def red_pac(money,num):
ret = random.sample(range(1,money*100),num-1)
ret.sort()
ret.insert(0,0)
ret.append(money*100)
for i in range(len(ret)-1):
value = ret[i+1] - ret[i]
yield value/100 g = red_pac(200,10)
for i in g:
print(i)

三、time模块

①时间戳time.time()

②结构化时间time.localtime()

③字符串时间time.strftime()

 时间戳 -- 结构化时间        #time.localtime()
结构化时间 -- 字符串时间 #time.strftime() 字符串时间 -- 结构化时间 #time.strptime
结构化时间 -- 时间戳 #time.mktime()

例题:

 1 t = '2019-03-20 10:40:00'
2 把这个时间向后退一个月
3 # 1.转成结构化
4 f = time.strptime(t,'%Y-%m-%d %X')
5 # 2.结构化时间转成时间戳
6 ts = time.mktime(f)
7 # 3.将时间戳向大变
8 new_ts = ts + 86400 * 30
9 # 4.将最新的时间戳转成结构化时间
10 new_f = time.localtime(new_ts)
11 # 5.将结构化时间转成字符串时间
12 print(time.strftime('%Y-%m-%d %X',new_f))
13
14 获取当前时间求前一月的现在时间
15 1.获取时间戳进行减法计算
16 new_ts = time.time() - 30*86400
17 # 2.最新的时间戳转成结构化时间
18 new_f = time.localtime(new_ts)
19 # 3.将结构化时间转成字符串时间
20 print(time.strftime('%Y-%m-%d %X',new_f))

四、os模块:主要和当前电脑操作系统做交互

os模块与文件夹相关:
 import os
os.makedirs('app/a/b/c') # 递归创建文件 ***
os.removedirs('app/a/b/c') # 递归删除文件, 当这个要删除的目录有文件就停止删除 ***
os.mkdir('app')       # 创建单个目录 ***
os.rmdir('app')      # 删除单个目录,目录如果有东西就报错不进行删除 ***
print(os.listdir('D:\PyCharmProject\s20\day14'))
#查看某个目录下的内容****

os模块和文件相关:

 os.remove()   #删除这个文件,删除了就不能恢复了    *****
os.rename() #修改文件的名字 *****

与操作系统相关:

 print(repr(os.sep))  #\\
C:\Users\lucky\Documents\Tencent Files\932023756\FileRecv
路径符号

 print(os.popen('dir').read())               ***
#在写程序的时候可以下发一些操作系统的指令
#在linux系统上相当于发shell命令
4 os.environ  获取系统环境变量

与path执行路径相关

 print(os.path.abspath('b'))      ****
获取当前文件的绝对路径
print(os.path.split(r'D:\PyCharmProject\s20\day14\b'))
将这个文件的绝对路径分成目录和文件
print(os.path.basename(r'D:\PyCharmProject\s20\day14\b')) **
获取的是这个文件的名字
print(os.path.dirname(r'D:\PyCharmProject\s20\day14\b')) ***
获取的是这个文件的目录路径
print(os.path.exists(r'D:\PyCharmProject\s20\day10\07 今日总结.py')) **
判断这个文件是否存在
print(os.path.isabs(r'D:\PyCharmProject\s20\day14\b'))
判断是否是绝对路径 print(os.path.join('C:\\','app','a','b')) *****
#路径拼接的 软件开发规范 框架 os.stat() print(os.stat('b').st_size) #获取文件大小 ,坑目录 ***
print(os.getcwd()) # 获取工作路劲 *** os.chdir('D:\PyCharmProject\s20\day13') # 路劲切换 *
print(os.getcwd())

五、sys模块:Python交互解释器交互的

import sys

 print(sys.argv[-1])       ***
接受cmd方式调用 后边的参数会传递进来
linux系统上 -- 后端开发 -- 数据库(文件) ip + 端口 print(sys.path) # 添加自定义模块路径的 # ****** print(sys.version) # 版本 获取解释的版本号 sys.platform = 'win1988' print(sys.platform) #获取当前操作系统的平台位数 # 可进行修改的 print(sys.exit(1))

六、hashlib

应用:①密文形式存储用户登录密码信息;

   ②利用其不可逆不可改的特性验证数据是否被篡改。

 import hashlib
md5 = hashlib.md5('盐'.encode('utf-8')) # 选择加密方式 加盐
md5.update('alex3714'.encode('utf-8')) # 将输入的明文转成字节然后进行加密
print(md5.hexdigest()) # 打印生成的密文

 user,pwd = input('user|pwd:').strip().split('|')
import hashlib md5 = hashlib.md5(str(user).encode('utf-8'))
md5.update(pwd.encode('utf-8'))
print(md5.hexdigest())
以用户名作为加密方式:
1 user,pwd = input('user|pwd:').strip().split('|')
import hashlib md5 = hashlib.md5(str(user).encode('utf-8'))
md5.update(pwd.encode('utf-8'))
print(md5.hexdigest())

加密方式除了md5还有sha1,sha256,sha512,其md5以及被破解,但sha系列的hash算法还很安全。

利用hashlib算法完成登录和注册页面的需求:

 hashlib 注册系统
import hashlib
def md5(username,password):
md5 = hashlib.md5(username[::-1].encode('utf-8'))
md5.update(password.encode('utf-8'))
return md5.hexdigest() def get_line():
with open('userinfo', encoding='utf-8') as f:
for line in f:
user, pwd = line.strip().split(',')
yield user,pwd def register():
flag = True
while flag:
username = input('user :')
password = input('passwd :')
for user,pwd in get_line():
if user == username:
print('您输入的用户名已经存在')
break
else:
flag = False
password = md5(username,password)
with open('userinfo',encoding='utf-8',mode='a') as f:
f.write('%s,%s\n'%(username,password))
 登录系统
1 def login():
username = input('user :')
password = input('passwd :')
for user,pwd in get_line():
if username == user and pwd == md5(username,password):
return True ret = login()
if ret:
print('登陆成功')

七、re模块

八、shutil模块  :删除文件夹(包括文件夹内的文件,)

 import shutil

 shutil.rmtree(path)
 #!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
让用户执行脚本传入要删除的文件路径,在内部帮助用将目录删除。
C:\Python36\python36.exe D:/code/s21day14/7.模块传参.py D:/test
C:\Python36\python36.exe D:/code/s21day14/7.模块传参.py
"""
import sys # 获取用户执行脚本时,传入的参数。
# C:\Python36\python36.exe D:/code/s21day14/7.模块传参.py D:/test
sys.argv = ["D:/code/s21day14/7.模块传参.py", "D:/test"]
path = sys.argv[1] # 删除目录
import shutil shutil.rmtree(path)

九、getpass模块(密码不显示,在终端运行)

 import getpass

 pwd = getpass.getpass('请输入密码:')
if pwd == '':
print('输入正确')
												

模块—— 序列化模块、random模块、os模块 、 sys模块、hashlib模块、collections模块的更多相关文章

  1. Python 第五篇(上):算法、自定义模块、系统标准模块(time 、datetime 、random 、OS 、sys 、hashlib 、json和pickle)

    一:算法回顾: 冒泡算法,也叫冒泡排序,其特点如下: 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应 ...

  2. Day5- Python基础5 模块导入、time、datetime、random、os、sys、hashlib、json&pickle

    本节目录: 1.模块的分类 2.模块的导入 3.time模块 4.datetime模块 5.random 6.os模块 7.sys模块 8.hashlib 9.json&pickle 一.模块 ...

  3. python模块(os,sys,hashlib,collections)

    列出目录下所有文件 os.listdir('dirname'):列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式返回. 创建文件夹: os.mkdir('文件夹')    创建文件夹 os ...

  4. day17——序列化、os、sys、hashlib、collections

    day17 序列化 json 两组4个方法: 1.dumps(序列化) -- loads(反序列) dumps(list):将对象转换成字符串 loads(str):将字符串转换成对象 list--s ...

  5. python 正则,os,sys,hashlib模块

    简单的小算法 random随机获取数据 import random def getrandata(num): a=[] i= while i<num: a.append(random.randi ...

  6. Python模块之time、random、os、sys、序列化、re

    Time模块 和时间有关系的我们就要用到时间模块.在使用模块之前,应该首先导入这个模块. #常用方法 1.time.sleep(secs) (线程)推迟指定的时间运行.单位为秒. 2.time.tim ...

  7. python-时间模块,random、os、sys、shutil、json和pickle模块

    一.time与datetime模块 time模块: 时间戳:表示的是从1970年1月1日00:00:00开始按秒计算的偏移量,返回类型为float类型 格式化时间字符串(Format String) ...

  8. python常用模块---collections、time、random、os、sys、序列号模块

    collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict. ...

  9. python time、datetime、random、os、sys模块

    一.模块1.定义模块:用来从逻辑上组织Python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件(文件名:test.py,对应的模块名:test)包:用来从逻辑上组织 ...

  10. python之常用模块一(time、random、os、sys)

    摘要:时间模块time .随机模块random .os模块.sys模块 一.时间模块 三种格式 时间戳时间:浮点数 单位为秒 时间戳起始时间: 1970.1.1 0:0:0 英国伦敦时间 1970.1 ...

随机推荐

  1. Linux系统查找清理磁盘大文件方法

    本文主要介绍Linux系统磁盘使用空间不足时,如何查找大文件并进行清理的方法. 下午使用df-h检查一台服务器磁盘使用空间,发现磁盘已经使用了100%,其中/dev/mapper/vg_iavp-lv ...

  2. php中签名公钥、私钥(SHA1withRSA签名)以及AES(AES/ECB/PKCS5Padding)加密解密详解

    由于http请求是无状态,所以我们不知道请求方到底是谁.于是就诞生了签名,接收方和请求方协商一种签名方式进行验证,来取得互相信任,进行下一步业务逻辑交流. 其中签名用得很多的就是公钥私钥,用私钥签名, ...

  3. POJ3349 Snowflake Snow Snowflakes (JAVA)

    首先声明代码并没有AC,内存超了 但我对此无能为力,有没有哪位大神好心教一下怎么写 哈希,然后比较花瓣数组,这些应该都没问题才对..唉.. 贴MLE代码 import java.util.*; pub ...

  4. 程序设计中的dry原则

    DRY:dont repeat yourself 假设一个逻辑(代码块)会重复两次或者以上,应该写成函数被调用 为什么呢,实际上,我们处处可见重复性的代码.这除了增加工作量之外,还会增加维护难度. d ...

  5. jquery选项卡效果

    效果图: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  6. 比较 GET 与 POST

    post比get安全 get请求方法向url添加数据  全部用POST不是十分合理,最好先把请求按功能和场景分下类, 对数据请求频繁,数据不敏感且数据量在普通浏览器最小限定的2k范围内,这样的情况使用 ...

  7. BT网站-IBMID.COM

    最近把網站改版了,主要是更改了搜索引擎. 大家可以訪問 什么是磁力链接(IBMID.COM)(Magnet URI)? 简单的说:类似下面这样以“magnet:?”开头的字符串,就是一条“磁力链接” ...

  8. [转] 在Jenkins Pipeline DSL中 遍历 groovy list

    [From] https://stackoverflow.com/questions/36360097/iterating-a-groovy-list-in-jenkins-pipeline-dsl ...

  9. SVN知识点整理

    Eclipse安装SubVersion插件 Help -> Install new software... -> add Name : Subversion Location : http ...

  10. MySQL数据库 InnoDB引擎 事务及行锁总结

    一.事务 1.事务的四大特性 (1)原子性:事务开始后所有的操作要么一起成功,要么一起失败,整个事务是一个不可分割的整体. (2)一致性:是物开始前到结束后,数据库的完整性约束没有被破坏. (3)隔离 ...