本文共 8367 字,大约阅读时间需要 27 分钟。
课程内容:
1.collections模块
2.time模块
3.random模块
4.os模块
5.sys模块
6.re模块
7.login模块
8.hasblib 模块
9.序列化模块
1.collections模块
(1).使用模块必须先导入 # 需要注意的是 已知的所有模块名都不可以作为python文件名
每一个模块都有一个大致的功能
collections给我们提供了一些额外的数据类型
str int list dict tuple set float 内置数据类型
每一个类都是一个数据类型 自定义数据类型
a = 'a' # 实例化 str('a')
(2).python一切皆对象
a = 1
(3).from math import sqrt
collecctions模块是扩展我们数据类型的一个模块
tuple元组
p = (1,2) # 坐标
可命名元祖
Point = collections.namedtuple('point',['x','y'])
p= Point(1,2)print(p)print(p.x)print(p.y)
在存储数据的基础上 严格的维持了一个秩序,数据的进出顺序
queue 队列 先进来的先出去 —— 售票
栈 先进来的后出去 —— 计算机的计算、算法
import queue #队列
q =queue.Queue()
l=list()
q.put(1) #放
q.put(2) #放
print(q.get()) #取
importcollections
dq=collections.deque()
dq.append(1)
dq.append(2)print(dq)print(dq.pop())print(dq)
dq.appendleft(5)print(dq.popleft())print(dq)
d= dict([('a', 1), ('b', 2), ('c', 3)])print(d.keys())from collections importOrderedDict
d= OrderedDict([('a', 1), ('b', 2), ('c', 3)])print(d.keys())from collections importdefaultdict
dd=defaultdict(list)print(dd)
dd['aaaaaaaaa'].append(1)print(dd)def func():return 5dd=defaultdict(func)
dd= defaultdict(lambda : 5)print(dd)
dd['aaaaaaaaa']print(dd)
dd['aaaaaaaaa'] = 20
print(dd)
a= 1
class B():pass
def c():pass
print(callable(a))print(callable(B))print(callable(c))from collections importnamedtuple
Point= namedtuple('point',['x','y'])print(Point)
p= Point(1,2)print(type(p))class A:pass
print(A)
a=A()print(type(a))
2.time模块
(1.)时间的几种表示格式
print(time.time())
1530330328 unix时间戳时间
为什么要有时间戳时间 —— 计算机用的float
格式化时间 —— 人用的 年月日时分秒 str
print(time.strftime('%Y')) #year
print(time.strftime('%m')) #month
print(time.strftime('%d')) #day
print(time.strftime('%H')) #hour
print(time.strftime('%M')) #Minute
print(time.strftime('%S')) #Second
print(time.strftime('%c')) #year
print(time.strftime('%m/%d/%Y %H:%M')) #year
时间戳时间float —— 给机器看的
结构化时间 —— 中间的过渡
格式化 %s —— 给人看的
(2).转换关系
timestamp =time.time()print(timestamp)
ts2= 3000000000
print(time.localtime())
struct_time=time.localtime(ts2)print(time.strftime('%m/%d/%Y %H:%M',struct_time))
struct_time= time.strptime('2020','%Y')print(time.mktime(struct_time))print(time.strptime('2020','%Y'))
3.random 模块:随机生成
# random 随机
# 随机
# l = [1,2,3,'a']
# 从4项随机选两个
# 从4项随机选一个,选两次
# 2,2
# 6位 数字+大小写字母的 验证码
# 数字 0,9
# 字母 a-z A-Z # chr()
# 字母怎么来的???
# 每一次每一位上的值可能是字母也可能是数字?
# print(chr(65))
# print(chr(97))
# 0-9 数字
# 65-90 大写字母
# 97-122 小写字母
# 从数字 大小写字母中随机的选取一个
def random_code(num,alpha=True):importrandom
code= ''
for i inrange(num):
choice= str(random.randint(0,9))ifalpha:
alpha_lower= chr(random.randint(65,90))
alpha_upper= chr(random.randint(97,122))
choice=random.choice([choice,alpha_lower,alpha_upper])
code+=choicereturncodeprint(random_code(4,False))
4.os模块:
'''os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd
os.curdir 返回当前目录: ('.')
os.pardir 获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2') 可生成多层递归目录
os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove() 删除一个文件
os.rename("oldname","newname") 重命名文件/目录
os.stat('path/filename') 获取文件/目录信息
os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command") 运行shell命令,直接显示
os.popen("bash command).read() 运行shell命令,获取执行结果
os.environ 获取系统环境变量
os.path
os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。
即os.path.split(path)的第二个元素
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) 如果path是绝对路径,返回True
os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小'''
5.sys 模块:
# print('3.6' in sys.version)
# print(sys.platform) # win32
# print(sys.path)
# 你的模块能不能被顺利的导入
# 取决于这个模块是否在你的sys.path路径中
# 路径的寻找是依据sys.path列表中的顺序查找的
# 找到一个符合条件的就停止了
import time
# print(sys.modules)
# 记载了我们已经导入的模块名以及这个模块的内存地址
# print(sys.argv)
# sys.exit() # 退出
# if len(sys.argv)>1 and sys.argv[1] == 'alex'and sys.argv[2] == 'alex3714':
# print('登陆成功')
# else:
# user = input('user:') # 阻塞
# pwd = input('pwd:')
# if user == 'alex' and pwd == 'alex3714': print('登陆成功')
6.re模块
# 正则表达式 ——字符串
# 和python语言,是一个独立的语法
# 是一个什么规则???
# 从一个巨大的字符串集合中,
# 根据规则来找到你想要的内容
# 或者判断某一段字符串是否是你规定的
# 条件
# 一个巨大的字符串
# 规则
# 结果
# 你想要的内容
#字符组中常用的范围
# 数字 [0-9]
# 字母 [A-Za-z]
# 数字 [A-Za-z0-9]
# 0,1
# 0,1,2,3,4,5,6,7
# 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
# [2\-5]
# -在字符组中有特殊的意义
# 如果你不希望它表示特殊意义,就用\进行转译
# 这样这个特殊的意义就被取消,它只表示它自己本身的意义
# 整数或小数
# 12
# 12.0
# 12.012
# '1 - 2 * ( (60-30 +-8 * 1024) - (-4*3)/ (16-3*2) )'
# while 循环
# 从这个字符串中先匹配出一个小括号
# 这个小括号里面不再有新的小括号了
# 从左到右依次匹配 乘除法
# '7.4*3'
# 首先要判断一下是除法还是乘法
# 21
import re
ret = re.findall('\d+(\.\d+)?', 'eva45.65+346[55] egon 35yuan15')
print(ret)
ret = re.findall('(\d)5', 'eva4565346[5555] egon 35yuan15')
print(ret) # findall特性 匹配的时候按照规则匹配,显示只显示分组内的
ret = re.findall('\[(\d+)\]', 'eva4565346[555] egon 35yuan15')
print(ret) # 在分组的开始加上?:表示取消分组优先
# ?做量词 表示0次或1次
# ?在量词后 表示惰性匹配
# ?:在分组开头 表示取消分组优先
# ret = re.search('(\d)5', 'eva4565346 egon 35yuan15')
# print(ret)
# if ret:
# print(ret.group())
# print(ret.group(0))
# print(ret.group(1))
# print(ret.group(2))
# 在search中没有正则规则的分组优先显示功能
# s = '1 - 2 * ( (60-30 +(-40/5) * (9 + 7 +10 )) - (-4*3)/ (16-3*2) )'
# print(eval(s))
# 去空格
#加减乘除 小括号算式
# 表达式的数据类型是str
# 不能用eval
# 算法 —— 中缀表达式 前缀 后缀
# 作业一定要写
# 从简单的地方开始写
# '60-30'
# 'a+b' /'a-b' /'a*b' / 'a/b'
# 首先判断是什么运算
# '+' 以加号为分隔符 split a,b 数据类型的转换 -- 小数
# 匹配乘除法
# \d+(\.\d+)?[*/]\d+(\.\d+)?
# 整体思路
# 有一个大字符串
# 从中匹配出括号,一个内部不再有括号的表达式 —— 先算括号里的
# 匹配这小表达式中的乘除法 —— 先乘除
# 后加减
# 替换
# 匹配
# 字符串的操作
7. login 模块
(1)login级别信息
importlogging
logging.debug('debug message') #调试模式
logging.info('info message') #基础正常的信息
logging.warning('warning message') #警告信息
logging.error('error message') #错误信息
logging.critical('critical message') #批判的 严重错误
(2)默认不打印debug,和info
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename='test.log',
filemode='a')
logging.debug('你好') #调试模式
logging.info('info message') #基础正常的信息
logging.warning('warning message') #警告信息
logging.error('error message') #错误信息
logging.critical('critical message') #批判的 严重错误
# basicConfig
# 1.中文的乱码
# 2.不能同时向屏幕和文件中输入
8.hasblib模块
MD5简单加密方法:
importhashlib
md5_obj= hashlib.md5() #选择了md5算法 32位16进制的字符串0.0001 1
s = input('>>>')
md5_obj.update(s.encode('utf-8'))print(md5_obj.hexdigest())
md5算法 —— 撞库
数字 字符串importhashlib
username= input('>>>')
md5_obj= hashlib.md5(username.encode('utf-8')) #选择了md5算法 32位16进制的字符串0.0001 1
s = input('>>>')
md5_obj.update(s.encode('utf-8'))print(md5_obj.hexdigest())
校验文件一致性:如果文件大于5个G使用一下方法:
importosimporthashlibdef get_md5(file,n = 10240):
with open(file,'rb') as f1:
md5_obj=hashlib.md5()
file_size=os.path.getsize(file)while file_size>0:
md5_obj.update(f1.read(n))
file_size-=nreturnmd5_obj.hexdigest()defcompare(file1,file2):return get_md5(file1) == get_md5(file2)
9.序列化模块:
序列化类型:json pickle shelve
序列化过程:
序列化:数据结构 —序列化—> 字符串
反序列化:字符串 -反序列化-〉数据结构
# 为什么需要序列化???
1.文件存储
2.网络传输
1. json支持的数据类型:字典 列表 数字类型 (json 字典的key只能是字符串)
序列化例子:
f = open('json_file','w')
json.dump([1,2,3],f) #只和文件相关
json.dump({'a':4,'b':5,'c':6},f) #只和文件相关
f.close()
反序列化:
f = open('json_file','r')
content= json.load(f) #只和文件相关
f.close()print(content,type(content))
2.pickle 支持几乎所有数据类型 包括自定义的类和对象
#class A:#def __init__(self,name,age):#self.name = name#self.age = age
#file = open('pickle_file','wb')#alex = A('alex',83)#pa = pickle.dump(alex,file)#file.close()#del alex#file = open('pickle_file','rb')#pal = pickle.load(file)#print(pal.name,pal.age)
importpickle#file = open('pickle_file','wb')#pickle.dump({1,2,3},file)#pickle.dump({(1,2,3):456},file)#file.close()
#file = open('pickle_file','rb')#while True:#try:#print(pickle.load(file))#except EOFError:#break
json 和 pickle 的区别:
# json
# 结果可读
# 所有的语言都通用
# 数据类型有限
# pickle —— 游戏退出的存档
# 结果是bytes
# 只支持python语言
# 几乎支持所有数据类型
转载地址:https://blog.csdn.net/weixin_32473663/article/details/113645539 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!