python22期_python22期第八天(正则表达式-模块,总结)
发布日期:2021-06-24 11:23:45 浏览次数:2 分类:技术文章

本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:假定在MYSQL_假定在名称为教学库的数据库中包含有学生、课程和选课三个表,它们的定义如下 - 问答库...
下一篇:nhibernate和mysql_利用NHibernate与MySQL交互

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月19日 02时00分03秒