一、模块的导入
1.什么是模块
一个py文件就是一个模块
2.模块之间的数据交流
我们可以再任意一个模块中使用另一个模块中所有的全局变量(普通变量\函数\类)
如果想要再一个模块中使用另外一个模块的内容,必须先导入模块
3.模块的分类
1)系统模块 - 系统已经定义好的模块,程序员可以直接导入使用。
2)第三方库模块(其他程序员或机构定义的模块) - 需要先下载导入到工程中以后再导入使用
3)自定义模块(在工程中创建的模块) - 程序员直接导入使用
4.导入模块
1)导入方式
import 模块名 - 导入指定模块,导入后可以使用模块中所有的全局变量,使用方式:模块名.变量
2)重命名
import 模块名 as 新模块名 - 导入模块的时候进行重命名,重命名后通过新模块来使用模块
from 模块 import 变量1 as 新变量1,… - 导入模块的时候对指定的变量进行重命名
二、导入模块的原理
当代码指定到import 或者 from-import导入模块的时候,系统会自动进入指定模块,执行这个模块中的所有代码
阻止模块内容的导入:
如果一个模块中的部分代码不希望再被导入的时候执行,就将这段代码写在if __name__ == ‘__main__’:语句中(每个模块都有一个__name__属性,这个属性保存的是模块名,默认值都是文件名。当我们直接执行某个模块的时候,这个模块的__name__的值会自动变成__main__,其他没有被执行的__name__的值都是自己的文件名)
三、函数式编程的标准写法
def func1():
print(123)
def func2():
print(456)
def main():
# 实现当前模块的功能(功能的实现全靠函数的类)
func1()
func2()
pass
if __name__ == '__main__':
main()
四、包的使用
1.什么是包
包就是包含__init__.py文件的文件夹
2.怎么使用包中的模块里面的内容
import 包.模块
from 包 import 模块
from 包.模块 import 变量1, 变量2, …
# ============1. import 包.模块 ===============
# import file.fileManager
# file.fileManager.read_file()
# import file.fileManager as FM
# FM.read_file()
# FM.write_file()
# ==============2. from 包 import 模块==============
# from file import fileManager
# fileManager.read_file()
# fileManager.write_file()
# ==============3. from 包.模块 import =============
# from file.fileManager import f_name, read_file
# print(f_name)
# read_file()
3.导入包的原理
导入包的时候,会执行执行包中的__init__.py文件中所有的代码
4.重复导入
import在导入模块或者包的时候会自动检查对应模块或者包之前是否已经导入过了,如果已经导入不会再重复导入
五、常用标准库
1.标准库和第三方库
标准库 - python自己提供的模块或者包,用的时候可以直接导入。
第三方库 - 由别人提供的模块或者包,需要先安装或者下载后才可以导入
2.常用的标准库
0s模块 - 提供文件或者文件夹操作的相关功能(例如:创建文件/文件夹、删除文件/文件夹、…)
sys模块 - 提供系统相关的操作
time模块 - 时间相关操作
datetime模块 - 时间相关的操作
json模块 - json操作
re模块 - 正则表达式相关操作
hashlib - 加密模块
…
turtle模块 - 画图
import time
# 1.time() - 获取当前时间,返回的是时间戳
# 2.sleep(时间) - 让程序睡眠指定时间(秒)
# 3.localtime() - 获取当前的本地时间
# 4.localtime(时间戳) - 将时间戳对应的时间转换成我们认识的时间
t1 = time.time()
time.sleep(2)
t2 = time.time()
print(t2-t1)
print(t1)
# 补充:时间戳
# 时间戳就是当前时间到格林威治时间的1970年1月1日0时0分0秒的时间差
六、hashlib的使用
1.hashlib模块的使用
hashlib是python3.x中提供的一个标准库,专门用来对数据进行hash加密的,常用的加密算法是: md5、shaxxx
hash算法:
hash算法又叫摘要算法或者离散算法
2.hash(md5)加密的特点
a.同样的内容使用相同算法加密后的结果是一样的
b.加密之后的结果不可逆
c.不管原数据大小或者长度是多少,使用同一种加密算法得到哦的密文(摘要)的长度是一样的
3.生成摘要(对数据加密)
1)根据算法创建hash对象
hashlib.算法名()
hash = hashlib.md5()
2)使用hash对象对指定的数据加密
hash对象.update(数据) - 对指定的数据加密(这儿的数据必须是二进制数据,类型是bytes)
pw = '123456'
# hash.update(bytes(pw, encoding='utf-8'))
hash.update(pw.encode())
3)获取摘要(获取加密后的密文)
di = hash.hexdigest()
print(di)
4)hash加密的应用2:生成数据摘要,确保原数据的完整性
with open('test.txt', 'rb') as f:
content = f.read()
hash2 = hashlib.md5()
hash2.update(content)
hash2.update('2020-5-8 5:49:0'.encode())
print(hash2.hexdigest())
补充:二进制和字符串之间的相互转换
-
字符串 -> 二进制
bytes(字符串, encoding=‘utf-8’)
字符串.encode() -
二进制 -> 字符串
str(二进制, encoding=‘utf-8’)
二进制.decode(encoding=‘utf-8’)
b = 'acb'.encode()
print(type(b))
str_b = str(b, encoding='utf-8')
print(str_b, type(str_b))
str_b2 = b.decode(encoding='utf-8')
print(str_b2, type(str_b2))
七、正则语法
1.什么是正则表达式
正则表达式是一种处理字符串的工具
2.正则语法(通用)
第一种:匹配符号
1)普通字符
除了在正则中有特殊功能和特殊意义以外的字符就是普通字符。
普通字符在正则表达式中表示这个字符本身
re_str = r'abc'
print(fullmatch(re_str, 'abc'))
2) . - 匹配一个任意字符
re_str = r'.bc' # 匹配一个长度是3的字符串,后两个字符是bc, 第一个字符是任意字符
print(fullmatch(re_str, '你bc'))
print(fullmatch(re_str, 'bc')) # None
print(fullmatch(re_str, 'abb')) # None
3) \w - 匹配任意一个数字、字母或者下划线(在ASCII码表中)
re_str = r'\w123'
print(fullmatch(re_str, '9123'))
print(fullmatch(re_str, 'A123'))
print(fullmatch(re_str, '_123'))
print(fullmatch(re_str, '+123')) # None
print(fullmatch(re_str, '胡123')) # 注意:\w可以匹配任意非ASCII码中的字符
4) \d - 匹配任意一个数字字符
re_str = r'\d\dabc'
print(fullmatch(re_str, '23abc'))
print(fullmatch(re_str, '00abc'))
print(fullmatch(re_str, '2Habc')) # None
5) \s - 匹配任意一个空白字符
常见的空白字符:’ ‘、’\n’、’\t’
re_str = r'\d\d\s\d'
print(fullmatch(re_str, '12 3'))
print(fullmatch(re_str, '89\t3'))
print(fullmatch(re_str, '90\n4'))
print(fullmatch(re_str, '12 3')) # None
6) \大写字母(\W, \S, \D)
\大写字母 的功能和 \小写字母 的功能相反
\S - 匹配任意一个非空白字符
\D - 匹配任意一个非数字字符
7) [字符集] - 匹配字符集中的任意一个字符
注意: a.一个[]只能匹配一个字符 b.[字符1-字符2]中两个字符之间的-表示范围:字符1到字符2, 并且要求字符1的编码值必须小于字符2
[abc] - 匹配a或者b或者c
[a-z] - 匹配任意一个小写字母
[A-Z] - 匹配任意一个大写字母
[a-zA-Z] - 匹配任意一个字母
[0-9] - 匹配任意一个数字
[2-9] - 匹配2到9的任意一个数字字符
[\u4e00-\u9fa5] - 匹配任意一个中文字符
8) [^字符集] - 匹配任意一个不在字符集中的字符
[^abc] - 匹配一个不是a、b、c的任意一个字符
[^a-z] - 匹配一个不是小写字母的任意一个字符
注意:
a. []中的^只有放在最前面的时候才有特殊意义,在其他位置的时候表示字符^本身
b. []中的-只有在两个字符之间的时候才有特殊意义,否则也是表示字符-本身
第二种、匹配次数
1) * - 匹配0次或多次
a* - a匹配0次或者多次
\d* - 任意数字出现0次或多次
[abc]* - [abc]匹配0次或者多次
2) + - 匹配1次或多次
3) ? - 匹配0次或一次
4) {}
{N} - 匹配N次
{M,N} - 匹配M到N次
{M,} - 匹配至少M次
{,N} - 最多N次