1.os
1.1 作用
主要是和操作系统相关的一个模块,如可以进行文件/目录的创建、删除等
1.2 导入
import os
1.3 常用方法及说明
常用方法 |
说明 |
os.getcwd() |
获取当前路径 |
os.chdir(path) |
改变当前工作目录 |
os.listdir(path) |
列出指定路径下的所有文件和子目录,以列表形式展示 |
os.mkdir(‘dirname’) |
创建文件夹 |
os.makedirs(‘dirname1/dirname2’) |
可以生成多层递归目录 |
os.removedirs(‘dirname’) |
若目录为空,则删除,并递归到上一层目录,若也为空,则删除。 |
os.rmdir(‘dirname’) |
删除空目录,若目录不为空则报错 |
os.remove() |
删除一个文件 |
os.rename(‘oldname’,‘newname’) |
重命名文件/目录 |
os.stat(‘path/filename’') |
获取文件/目录信息 |
os.sep |
输入操作系统特定的路径分隔符,win下为’\‘,Linux为’/’ |
os.name |
获取当前的平台,win为’nt’ ,Linux为’posix’ |
os.system(‘command’) |
运行shell命令 |
os.environ |
获取系统环境变量 |
os.path.abspath(path) |
返回path的绝对路径 |
os.path.split(path) |
将path分割成目录和文件名的元组 |
os.path.splittext(path) |
分割路径,返回路径名和文件扩展名的元祖 |
os.path.dirname(path) |
返回path的上一层目录 |
os.path.basename(path) |
返回path中最后的文件名 |
os.path.exist(path) |
若path存在返回True,否则返回False |
os.path.isfile(path) |
若path是一个文件则返回Ture,否则返回False |
os.path.isdir(path) |
若path是一个目录则返回Ture,否则返回False |
os.path.isabs(path) |
若path是绝对路径则返回Ture,否则返回False |
os.path.join(path1[, path2[, …]]) |
把目录和文件名合成一个路径 |
os.path.getsize(path) |
返回文件大小,如果文件不存在就报错 |
os.path.getmtime(path) |
返回最近文件修改时间 |
os.path.getctime(path) |
返回文件path创建时间 |
os.path.realpath(path) |
返回path的真实路径 |
os.path.normpath(path) |
返回path的真实路径 |
1.4 示例
import os
print(os.getcwd())
print(os.listdir())
os.mkdir("aaa")
os.rmdir("aaa")
os.makedirs("abc/bcd")
os.removedirs("abc/bcd")
print(os.stat('abc.txt'))
print(os.path.abspath("."))
os.path.exists(r"E:\project\demo01")
os.path.isfile("abc.txt")
print(os.path.split(r"E:\project\demo_mod\abc.txt"))
print(os.path.dirname(r"E:\project\demo_mod\abc.txt"))
2.sys
2.1 作用
针对python解释器相关的变量和方法
2.2 导入
import sys
2.3 常用方法及说明
属性/方法 |
说明 |
sys.argv |
命令行参数,第一个参数为脚本名字 |
sys.modules |
所有加载到内存的模块都放在modules |
sys.path |
返回查找模块的搜索路径,以列表返回 |
sys.platform |
返回操作系统平台名词 |
sys.version |
返回python解释器程序的版本信息 |
sys.exit() |
退出程序 |
2.4 示例
import sys
print("获取默认第一个参数:",sys.argv)
print("获取系统路径:",sys.path)
print("获取当前平台:",sys.platform)
print("获取当前版本:",sys.version)
获取默认第一个参数: ['E:/project/demo_mod/demo02_sys.py']
获取系统路径: ['E:\\project\\demo_mod', 'E:\\project\\demo_mod', 'C:\\python36\\python36.zip', 'C:\\python36\\DLLs', 'C:\\python36\\lib', 'C:\\python36', 'C:\\python36\\lib\\site-packages']
获取当前平台: win32
获取当前版本: 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)
3.time
3.1 作用
和时间相关的模块
3.2 导入
import time
3.3 常用方法及说明
方法 |
说明 |
time.time() |
获取当前时间戳 |
time.sleep(n) |
当前线程停止运行n秒 |
time.asctime() |
返回当前时间,格式是西欧格式 |
time.ctime() |
返回当前时间,格式是西欧格式 |
time.localtime() |
返回当前时间对象 |
time.struct_time() |
构造一个对应的事件对象 |
time.strftime() |
将一个时间对象格式化为特定的字符串输出 |
time.strptime() |
照格式化字符把一个格式化时间字符串转成元组。 |
3.4 示例
import time
print("获取当前时间戳:",time.time())
print("返回当前时间,西欧格式:",time.ctime())
print("返回当前时间对象:",time.localtime())
time.sleep(2)
print("返回格式化后的时间:",time.strftime("%Y-%m-%d %X", time.localtime()))
print("将格式化的时间转化成时间对象,元祖形式:",time.strptime('2010-8-11 7:26:16', '%Y-%m-%d %X'))
获取当前时间戳: 1634373068.0492582
返回当前时间,西欧格式: Sat Oct 16 16:31:08 2021
返回当前时间对象: time.struct_time(tm_year=2021, tm_mon=10, tm_mday=16, tm_hour=16, tm_min=31, tm_sec=8, tm_wday=5, tm_yday=289, tm_isdst=0)
返回格式化后的时间: 2021-10-16 16:31:10
将格式化的时间转化成时间对象,元祖形式: time.struct_time(tm_year=2010, tm_mon=8, tm_mday=11, tm_hour=7, tm_min=26, tm_sec=16, tm_wday=2, tm_yday=223, tm_isdst=-1)
4.datetime
4.1 作用
关于时间和日期的模块 ,这里面有几个常用的类,包括:
- date : 日期类
- time : 时间类
- datetime : 日期和时间的类 ,相当于前面的两个类
- datedelta : 时间间隔
4.2 导入
4.3 常用方法及说明
from datetime import date
d = date(date(2020,11,20))
下面表格中的d就是上面的日期对象
属性/方法 |
说明 |
date.max |
返回最大的日期对象 |
date.min |
返回最小的日期对象 |
d.year |
返回2020 |
d.month |
返回11 |
d.day |
返回20 |
d.replace(year,month,day) |
生成并返回一个新的日期对象,原日期对象不变 |
d.timetuple() |
返回日期对应的time.struct_time对象 |
d.toordinal() |
返回日期自0001-01-01开始的第多少天 |
d.weekday() |
返回日期是星期几,[0, 6],0表示星期一 |
d.isoweekday() |
返回日期是星期几,[1, 7], 1表示星期一 |
d.isocalendar() |
返回一个元组,格式为:(year, weekday, isoweekday) |
d.isoformat() |
返回‘YYYY-MM-DD’格式的日期字符串 |
d.strftime(format) |
返回指定格式的日期字符串,与time模块的strftime(forma t, struct_time)功能相同 |
from datetime import time
t = time(20,51,32)
下面表格中的t就是上面的时间对象
属性/方法 |
说明 |
t.hour |
返回20,取值范围[0,23] |
t.minute |
返回51,取值范围在[0,59] |
t.second |
返32,取值范围在[0,59] |
t.microsecond |
微秒 |
t.tzinfo |
返回传递给time构造方法的tzinfo对象,如果该参数未给出,则返回None |
t.replace(hour[, minute[, second[, microsecond[, tzinfo]]]]) |
生成并返回一个新的时间对象,原时间对象不变 |
t.isoformat() |
返回一个‘HH:MM:SS.%f’格式的时间字符串 |
t.strftime() |
返回指定格式的时间字符串,与time模块的strftime(format, struct_time)功能相同 |
from datetime import datetime
dt = datetime(2020,09,22,10,35,28,322)
下面表格中的dt就是上面的日期时间对象
属性/方法 |
说明 |
dt.year |
返回2020 |
dt.month |
返回09 |
dt.day |
返回22 |
dt.hour |
返回10 |
dt.minute |
返回35 |
dt.second |
返回28 |
dt.microsecond |
返回322 |
datetime.today() |
返回一个表示当前本期日期时间的datetime对象 |
datetime.now([tz]) |
返回指定时区日期时间的datetime对象,如果不指定tz参数则结果同上 |
datetime.utcnow() |
返回当前utc日期时间的datetime对象 |
datetime.fromtimestamp(timestamp[, tz]) |
根据指定的时间戳创建一个datetime对象 |
datetime.utcfromtimestamp(timestamp) |
根据指定的时间戳创建一个datetime对象 |
datetime.combine(date, time) |
把指定的date和time对象整合成一个datetime对象 |
datetime.strptime(date_str, format) |
将时间字符串转换为datetime对象 |
datetime.timedelta() |
返回一个时间间隔对象,可以直接与datetime.datetime对象做加减操作 |
4.4 示例
date示例
from datetime import date
now = date(2021, 10, 16)
tomorrow = now.replace(day = 17)
print('今天日期:', date.today())
print('今天日期:', now,)
print('明天日期:', tomorrow)
print("日期的元祖", now.timetuple())
print('返回星期几,0代表星期一:', now.weekday())
print('返回星期几,1代表星期一:', now.isoweekday())
print( '返回一个元祖', now.isocalendar())
print( '返回日期字符串:', now.isoformat())
print( '返回格式化的日期:', now.strftime("%Y-%m-%d"))
今天日期: 2021-10-16
今天日期: 2021-10-16
明天日期: 2021-10-17
日期的元祖 time.struct_time(tm_year=2021, tm_mon=10, tm_mday=16, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=289, tm_isdst=-1)
返回星期几,0代表星期一: 5
返回星期几,1代表星期一: 6
返回一个元祖 (2021, 41, 6)
返回日期字符串: 2021-10-16
返回格式化的日期: 2021-10-16
time示例
from datetime import time
t1 = time(17,25,15)
print("显示小时:",t1.hour)
print("显示分钟:",t1.minute)
print("显示秒:",t1.second)
print("显示微秒:",t1.microsecond)
tm1 = t1.replace(minute=32)
print("替换后时间:",tm1)
print('返回时间字符串:', t1.isoformat())
print('返回格式化后的时间字符串', t1.strftime("%X"))
显示小时: 17
显示分钟: 25
显示秒: 15
显示微秒: 0
替换后时间: 17:32:15
返回时间字符串: 17:25:15
返回格式化后的时间字符串 17:25:15
datetime示例
from datetime import datetime
print('最大时间:', datetime.max)
print('最小时间:', datetime.min)
print('今天时间,精确到微秒:', datetime.today())
print('现在时间,精确到微秒::', datetime.now())
print("格式化日期:",datetime.strftime(datetime.now(),"%y-%m-%d %H:%M:%S"))
最大时间: 9999-12-31 23:59:59.999999
最小时间: 0001-01-01 00:00:00
今天时间,精确到微秒: 2021-10-16 17:41:08.807900
现在时间,精确到微秒:: 2021-10-16 17:41:08.807900
格式化日期: 21-10-16 17:41:08
timedelta示例
from datetime import timedelta,datetime
dt = datetime.now()
dt1 = dt + timedelta(days=-1)
dt2 = dt - timedelta(days=1)
dt3 = dt + timedelta(days=1)
delta_obj = dt3-dt
print("当前日期-1:",dt1)
print("当前日期-1:",dt2)
print("当前日期+1:",dt3)
print("相差几天:",delta_obj)
当前日期-1: 2021-10-15 17:45:39.574903
当前日期-1: 2021-10-15 17:45:39.574903
当前日期+1: 2021-10-17 17:45:39.574903
相差几天: 1 day, 0:00:00
5.random
5.1 作用
用于生成随机数
5.2 导入
import random
5.3 常用方法及说明
方法 |
说明 |
random.random() |
用于生成一个0~1的随机浮点数 |
random.uniform(a,b) |
用于生成一个指定范围内的随机浮点数 |
random.randint(a,b) |
用于生成一个指定范围内的整数 |
random.randrange(start,end,step) |
从指定范围内,按指定基数递增的集合中 获取一个随机数。 |
random.choice(sequence) |
从序列中获取一个随机数 |
random.shuffle(x[, random]) |
用于将一个列表中的元素打乱,即将列表内的元素随机排列。 |
random.sample(sequence, k) |
从指定序列中随机获取指定长度的片断并随机排列。 |
5.4 示例
import random
print("生成一个0~1的随机数:",random.random())
print("生成一个指定范围内的随机数:",random.uniform(1,10))
print("生成一个指定范围的随机整数:",random.randint(1,100))
print("生成指定集合,然后随机生成一个数:",random.randrange(1,5,1))
print("从列表中随机拿一个数:",random.choice(['a','b','c','d']))
print("指定的长度中随机排序",random.sample(['a','b','c','d'],3))
lst = [1,3,46,33,'a','b','c','d']
random.shuffle(lst)
print("列表被打乱后随机排序",lst)
生成一个0~1的随机数: 0.06636579979518498
生成一个指定范围内的随机数: 7.29403347010388
生成一个指定范围的随机整数: 93
生成指定集合,然后随机生成一个数: 3
从列表中随机拿一个数: c
指定的长度中随机排序 ['d', 'b', 'a']
列表被打乱后随机排序 ['a', 3, 46, 'b', 1, 'c', 33, 'd']
6.subprocess
6.1 作用
执行系统命令
6.2 导入
import subprocess
6.3 常用方法及说明
方法 |
说明 |
subprocess.call(command) |
执行命令,返回状态码 |
subprocess.run() |
执行命令,等待命令执行完成后返回一个包含执行结果的CompletedProcess类的实例。 |
subprocess.check_call(command) |
执行命令,如果执行状态码是0,则返回0,否则抛出异常 |
subprocess.check_output() |
执行命令,如果执行状态码是0,则返回命令执行结果,否则抛出异常 |
subprocess.getoutput(cmd) |
接收字符串格式的命令,执行命令并返回执行结果,其功能类似于os.popen(cmd).read()和commands.getoutput(cmd)。 |
subprocess.getstatusoutput(cmd) |
执行cmd命令,返回一个元组(命令执行状态, 命令执行结果输出),其功能类似于commands.getstatusoutput()。 |
subprocess.Popen() |
可以执行各种命令,以上的那些方法都是基于此类实现的。 |
6.4 示例
import subprocess
subprocess.run(["dir"],shell=True)
subprocess.run(["java","-version"])
subprocess.call("dir",shell=True)
subprocess.check_call("dir",shell=True)
subprocess.getoutput("dir")
subprocess.getstatusoutput("dir")
7.hashlib
7.1 作用
用于加密相关的操作
7.2 导入
import hashlib
7.3 常用方法及说明
方法 |
说明 |
hashlib.md5() |
进行md5算法加密 |
hashlib.sha1() |
进行SHA1算法加密 |
hashlib.sha224() |
进行SHA224算法加密 |
hashlib.sha256() |
进行SHA256算法加密 |
hashlib.sha384() |
进行SHA384算法加密 |
7.4 示例
import hashlib
m1 = hashlib.md5('hello python'.encode(encoding='utf-8'))
print(m1.hexdigest())
sh224 = hashlib.sha224("hello python".encode('utf-8'))
print(sh224.hexdigest())
sh256 = hashlib.sha256("hello python".encode('utf-8'))
print(sh256.hexdigest())
sh384 = hashlib.sha384("hello python".encode('utf-8'))
print(sh384.hexdigest())
e53024684c9be1dd3f6114ecc8bbdddc
7f78ad20eff5afc21166e6a5e22962a2819bd28d335ba95ff414b3f5
373a23512f9531ad49ec6ad43ecdda58df01e59d9ec5812d601fd05cc53345d3
eaf44aabb38c34ff948e714b9c3c08f3fed996d74fc9f1225d7368ccb386465df272e55912041921eddf13b51aff833c
8.json
8.1 作用
编码或解码json对象
8.2 导入
import json
8.3 常用方法及说明
方法 |
说明 |
json.dumps() |
将python对象转化成json字符串 |
json.loads() |
将json字符串转化为python对象 |
json.dump() |
将python对象转化成json字符串并存入文件 |
json.load() |
从文件读取字符串转化成python对象 |
8.4 示例
import json
color = '{"1":"red","2":"green","3":"blue","4":"black"}'
color_dict = json.loads(color)
print("color_dict:",color_dict)
color_json = json.dumps(color_dict)
print("color_json:",color_json)
with open("color.json") as f:
dt = json.load(f)
print("dt:",dt)
with open("color1.json","w") as f1:
json.dump(dt,f1)
color_dict: {'1': 'red', '2': 'green', '3': 'blue', '4': 'black'}
color_json: {"1": "red", "2": "green", "3": "blue", "4": "black"}
dt: {'1': 'red', '2': 'green', '3': 'blue', '4': 'black'}
9.pickle
9.1 作用
用于序列化的模块
9.2 导入
import pickle
9.3 常用方法及说明
方法 |
说明 |
pickle.dumps() |
将数据通过特殊的形式转换为只有python语言认识的字符串 |
pickle.loads() |
将pickle数据转换为python的数据结构 |
pickle.dump() |
将数据通过特殊的形式转换为只有python语言认识的字符串,并写入文件 |
pickle.load() |
从数据文件中读取数据,并转换为python的数据结构 |
9.4 示例
import pickle
color = ["red","green","blue","black"]
color_byte = pickle.dumps(color)
print("color_byte:",color_byte)
color_obj = pickle.loads(color_byte)
print("color_obj:",color_obj)
class Person():
def __init__(self,name,age):
self.name = name
self.age = age
p = Person('zhangsan',21)
with open("color.txt","wb") as f:
dt = pickle.dump(p,f)
with open("color.txt","rb") as f:
p_data = pickle.load(f)
print(p_data)
color_byte: b'\x80\x03]q\x00(X\x03\x00\x00\x00redq\x01X\x05\x00\x00\x00greenq\x02X\x04\x00\x00\x00blueq\x03X\x05\x00\x00\x00blackq\x04e.'
color_obj: ['red', 'green', 'blue', 'black']
<__main__.Person object at 0x03A4B050>
10.shutil
10.1 作用
主要用于文件或目录的复制或归档的操作
10.2 导入
import shutil
10.3 常用方法及说明
方法 |
说明 |
shutil.copy(‘源文件’,‘目标地址’) |
复制文件 |
shutil.copy2(‘源文件’,‘目标地址’) |
复制文件,暴露元数据 |
shutil.copyfileobj(open(‘源文件’,‘r’),open(‘目标文件’,‘w’)) |
讲一个文件的内容拷贝到另外一个文件当中 |
shutil.copyfile(‘源文件’,‘目标文件’) |
将一个文件的内容拷贝到另外一个文件中 |
shutil.copytree(‘源目录’,‘目标目录’) |
复制整个目录 |
shutil.copymode() |
拷贝权限 |
shutil.copystat() |
拷贝元数据(状态) |
shutil.rmtree() |
移除整个目录,无论是否为空 |
shutil.move(‘源地址’,‘目标地址’) |
移动文件或文件夹 |
shutil.which(‘命令字符串’) |
检测命令对应的文件路径 |
shutil.disk_usage(‘盘符’) |
检测磁盘使用信息 |
shutil.make_archive(‘目标文件路径’,‘归档文件后缀’,‘需要归档的目录’) |
归档函数,归档操作 |
shutil.unpack_archive(‘归档文件路径’,‘解包目标文件夹’) |
解包操作 |
shutil.get_archive_formats() |
获取当前系统已注册的归档文件格式(后缀) |
shutil.get_unpack_formats() |
获取当前系统已经注册的解包文件格式(后缀) |
10.4 示例
import shutil
shutil.copy('abc.txt','bcd.txt')
shutil.copy2('abc.txt','ddd.txt')
with open("abc.txt","rb") as f ,open("ddd.txt","wb") as s:
shutil.copyfileobj(f,s)
shutil.copyfile('abc.txt','acc.txt')
shutil.copymode('abc.txt','acc.txt')
shutil.make_archive("a1","zip","E:\project\demo2801")
11.configparser
11.1 作用
读写配置文件
11.2 导入
import configparser
1.3 常用方法及说明
方法 |
说明 |
configparser.read(filename) |
读取配置文件,直接读取ini文件内容 |
configparser.sections() |
获取ini文件内所有的section,以列表形式返回 |
configparser.options(sections) |
获取指定sections下所有options ,以列表形式返回 |
configparser.items(sections) |
获取指定section下所有的键值对 |
configparser.get(section, option) |
获取section中option的值,返回为string类型 |
configparser.getint(section,option) |
得到section中option的值,返回int类型的结果 |
configparser.write(filename) |
将configparser对象写入.ini类型的文件 |
configparser.add_section() |
添加一个新的section |
configparser.add_set(section,option,value) |
对section中的option信息进行写入 |
configparser.remove_section(section) |
删除文件中的某个section的数值 |
configparser.remove_option(section,option) |
删除文件中某个section下的option的数值 |
11.4 示例
配置项生成和读取
import configparser
conf = configparser.ConfigParser()
def write_conf():
conf['mysql'] = {
"host" : "192.169.10.68",
"port" : "3306",
"user" : "root",
"password" : "123456"
}
with open('config.ini','w',encoding='utf-8') as f:
conf.write(f)
"""
调用write_conf()将生成config.ini文件,文件内容如下:
[mysql]
host = 192.169.10.68
port = 3306
user = root
password = 123456
"""
conf.read('config.ini',encoding='utf-8')
print("ini内所有的section,以列表形式返回:",conf.sections())
for k,v in conf.items('mysql'):
print(k,v)
"""
通过conf.items()循环后返回如下:
host 192.169.10.68
port 3306
user root
password 123456
"""
print(conf.options('mysql'))
print("获取port的值:",conf.get("mysql","port"))
配置项的新增、修改、删除
import configparser
conf = configparser.ConfigParser()
conf.read('config.ini')
def add_config():
'''
要新增的内容
[api]
name = /user/login
method = 'get'
body = {'username':'admin','password':'123456'}
'''
conf.add_section('api')
conf.set('api','name','/user/login')
conf.set('api','method','get')
conf.set('api','body',"{'username':'admin','password':'123456'}")
with open('config.ini','w') as f:
conf.write(f)
conf.set('api','method','post')
with open('config.ini', 'w') as f:
conf.write(f)
conf.remove_option('api','body')
conf.remove_section('api')
with open('config.ini', 'w') as f:
conf.write(f)
12.yaml
12.1 作用
进行yaml格式的读取和转化
12.2 导入
import yaml
12.3 常用方法及说明
方法 |
说明 |
yaml.load() |
读取yaml文件 |
yaml.dump() |
将一个python对象生成yaml文档 |
yaml.load_all() |
如果string或文件包含几块yaml文档,可以使用yaml.load_all来解析全部的文档。 |
yaml.dump_all() |
将多个段输出到一个文件中 |
12.4 示例
import yaml
"""
文件名:sutdent.yaml
文件内容:
name: zhangsan
age: 37
lower student:
name: lisi
age: 25
higher student:
- name: wangwu
age: 35
- name1: zhaoliu
age1: 42
"""
with open('sutdent.yaml') as f:
res = yaml.load(f,Loader=yaml.FullLoader)
print("读取结果:",res)
dct = {'a':'python','b':'java'}
res1 = yaml.dump(dct)
print(res1)
fl = '''
---
name: tony
age: 20
---
name: lisy
age: 29
'''
res2 = yaml.load_all(fl,Loader=yaml.FullLoader)
for data in res2:
print(data)
obj1 = {"name": "James", "age": 20}
obj2 = ["Lily", 19]
with open(r'a.yaml', 'w') as f:
yaml.dump_all([obj1, obj2], f)
"""
输出到文件如下:
age: 20
name: James
---
- Lily
- 19
"""
读取结果: {'name': 'zhangsan', 'age': 37, 'lower student': {'name': 'lisi', 'age': 25}, 'higher student': [{'name': 'wangwu', 'age': 35}, {'name1': 'zhaoliu', 'age1': 42}]}
a: python
b: java
{'name': 'tony', 'age': 20}
{'name': 'lisy', 'age': 29}
13.itertools
13.1 作用
用来产生不同类型迭代器
13.2 导入
import itertools
13.3 常用方法及说明
方法 |
说明 |
count( start [,step]) |
创建一个从 start 开始,步长为 step 的迭代器,默认为1。 |
cycle( iterable ) |
创建一个从 iterable 中 循环 取出元素的迭代器。 |
repeat( elem [,n] ) |
重复 elem元素 n次。 n为空时,重复无穷次。 |
accumulate( p [,func] ) |
创建一个迭代器,返回累加和或其他二元函数的累加结果。 |
chain( p, q, … ) |
把可迭代对象p, q 中的元素连接起来。 |
chain.from_iterable( iterable ) |
要求iterable对象中的元素也是可迭代的,然后把元素中元素创建一个迭代器 |
compress(data, selectors) |
创建一个迭代器,它返回data 中经selectors 真值测试为True 的元素。 |
dropwhile(predicate, iterable) |
创建一个迭代器,如果predicate 为true,迭代器丢弃这些元素,然后返回其他元素。 |
filterfalse(predicate, iterable) |
创建一个迭代器,只返回iterable 中predicate 为False 的元素。 |
groupby(iterable, key=None) |
创建一个迭代器,对里面的元素 按 key 进行分组。 |
islice(iterable, start, stop[, step ]) |
创建一个迭代器,返回从iterable 里选中的元素。如果start 不是0,跳过iterable 中的元素,直到到达start 这个位置。之后迭代器连续返回元素,除非step 设置的值很高导致被跳过。 |
starmap(function, iterable) |
类似 map(),function函数历遍 iterable中的元素。 |
takewhile(predicate, iterable) |
创建一个迭代器,只要predicate 为真就从可迭代对象中返回元素。 |
tee(iterable, n=2) |
从一个可迭代对象中返回n 个独立的迭代器。 |
zip_longest(*iterables, fillvalue=None) |
创建一个迭代器,从每个可迭代对象中收集元素。如果可迭代对象的长度未对齐,将根据fillvalue 填充缺失值。 |
13.4 示例
无限迭代器
import itertools
"""
start : 开始索引
step : 步长
"""
for i in itertools.count(1,2):
if i > 8:
break
print("i =", i)
"""
i = 1
i = 3
i = 5
i = 7
"""
sum = 0
for i in itertools.cycle("123"):
print(i,end=" ")
if sum > 10:
break
sum += int(i)
print()
"""
obj : 循环的对象
times : 循环的次数
"""
for x in itertools.repeat("hello",2):
print(x,end=" ")
print()
合并与筛选迭代器
import itertools
"""
p , q 都是可迭代对象
"""
for i in itertools.chain("hello","python"):
print(i,end=" ")
print()
"""
输出 :h e l l o p y t h o n
"""
for i in itertools.chain.from_iterable(["hello","python"]):
print(i,end=" ")
print()
"""
data:一个可以用来迭代的数据。
selector:选择器,用来对data进行筛选。
生成一个筛选之后的迭代器,筛选规则为,当selector的第i个值为真,则保留data的第i个值,否则去除data的第i个值
"""
for x in itertools.compress('ABCDEF', [1, 0, 1, 0, 1, 1]):
print(x,end=" ")
print()
"""
predicate:一个判断函数,该函数返回值类型为bool。
iterable:可迭代对象。
"""
for i in itertools.dropwhile(lambda x:x<3,[1,2,3,4,5]):
print(i,end=" ")
print()
"""
创建一个迭代器,只要 predicate 为真就从可迭代对象中返回元素。
"""
for i in itertools.takewhile(lambda x: x > 5, [7, 6, 32, 3, 6, 5]):
print(i,end=" ")
print()
14.re
14.1 作用
正则匹配 ,需要说明的是,使用这个模块需要懂得一些正则表达式相关的知识 。
14.2 导入
import re
14.3 常用方法及说明
方法 |
说明 |
re.match(pattern, string, flags=0) |
若匹配成功,则返回一个匹配的对象,否则返回None |
re.compile(pattern) |
编译正则表达式,生成一个正则表达式对象 |
re.search() |
搜索整个字符串并返回第一个成功的匹配,如果没有匹配则返回None |
re.findall() |
在字符串中找到正则表达式所匹配的所有子串并返回一个列表,若没有匹配则返回空列表 |
re.finditer() |
在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。 |
re.sub(pattern, repl, string, count=0, flags=0) |
将匹配到的数据进行替换 |
re.subn(pattern, repl, string[, count]) |
行为与sub()相同,但是返回一个元组 (字符串, 替换次数) |
re.split(pattern, string, maxsplit=0, flags=0) |
根据匹配进⾏切割字符串,并返回⼀个列表。 |
14.4 示例
import re
"""
从字符串的开头进行匹配, 匹配成功就返回一个匹配对象,匹配失败就返回None
若匹配到,通过调用group()方法得到匹配的字符串并返回
"""
print("匹配到的字符串为:",re.match("ac","acd").group())
"""
搜索整个字符串去匹配第一个并返回,未匹配成功返回None
若匹配到,通过调用group()方法得到匹配的字符串并返回
"""
print("匹配到的字符串为:",re.search("ac","ddacd").group())
"""
match和search均用于匹配单值,即:只能匹配字符串中的一个,如果想要匹配到字符串中所有符合条件的元素,则需要使用 findall。
"""
print("匹配到的字符串为:",re.findall("ac","dacdacd"))
"""
替换匹配成功的指定位置字符串
"""
res = re.sub('\d','py','doc.2.exe.3.xls')
print("替换数字为py:",res)
"""
根据正则匹配分割字符串
"""
res1=re.split('a','a1bcd')
print("分割字符得到:",res1)
"""
python代码最终会被编译为字节码,之后才被解释器执行。
在模式匹配之前,正在表达式模式必须先被编译成regex对象,
预先编译可以提高性能,re.compile()就是用于提供此功能
"""
obj=re.compile('\d{3}')
ret=obj.search('abcd123edee')
print(ret.group())
"""
匹配对象的两个主要方法:
group() 返回所有匹配对象,或返回某个特定子组,如果没有子组,返回全部匹配对象
groups() 返回一个包含唯一或所有子组的的元组,如果没有子组,返回空元组
"""
15.calendar
15.1 作用
提供了和日历相关的方法
15.2 导入
import calendar
15.3 常用方法及说明
方法 |
说明 |
calendar.calendar(year) |
返回某一年的年历 |
calendar.month(year,month) |
返回月历 |
calendar.weekday(year,month,day) |
返回传入的日期是星期几。 |
calendar.isleap(year) |
返回传入的年是不是闰年,是返回True,否则为false。如2020年是闰年。 |
calendar.leapdays(start, end) |
返回start,end之间有多少个闰年,左闭右开区间。 |
calendar.timegm(tupletime) |
接受一个时间元组,返回时间戳,时间元组的值依次表示年、月、日、时、分、秒。 |
15.4 示例
import calendar
print("calendar(years)返回某一年的日历:")
print(calendar.calendar(2021))
""" 输出 :
2021
January February March
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 1 2 3 4 5 6 7 1 2 3 4 5 6 7
4 5 6 7 8 9 10 8 9 10 11 12 13 14 8 9 10 11 12 13 14
11 12 13 14 15 16 17 15 16 17 18 19 20 21 15 16 17 18 19 20 21
18 19 20 21 22 23 24 22 23 24 25 26 27 28 22 23 24 25 26 27 28
25 26 27 28 29 30 31 29 30 31
April May June
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 4 1 2 1 2 3 4 5 6
5 6 7 8 9 10 11 3 4 5 6 7 8 9 7 8 9 10 11 12 13
12 13 14 15 16 17 18 10 11 12 13 14 15 16 14 15 16 17 18 19 20
19 20 21 22 23 24 25 17 18 19 20 21 22 23 21 22 23 24 25 26 27
26 27 28 29 30 24 25 26 27 28 29 30 28 29 30
31
July August September
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 4 1 1 2 3 4 5
5 6 7 8 9 10 11 2 3 4 5 6 7 8 6 7 8 9 10 11 12
12 13 14 15 16 17 18 9 10 11 12 13 14 15 13 14 15 16 17 18 19
19 20 21 22 23 24 25 16 17 18 19 20 21 22 20 21 22 23 24 25 26
26 27 28 29 30 31 23 24 25 26 27 28 29 27 28 29 30
30 31
October November December
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 1 2 3 4 5 6 7 1 2 3 4 5
4 5 6 7 8 9 10 8 9 10 11 12 13 14 6 7 8 9 10 11 12
11 12 13 14 15 16 17 15 16 17 18 19 20 21 13 14 15 16 17 18 19
18 19 20 21 22 23 24 22 23 24 25 26 27 28 20 21 22 23 24 25 26
25 26 27 28 29 30 31 29 30 27 28 29 30 31
"""
print("firstweekday()返回每周的起始日:",calendar.firstweekday())
print("isleap()返回是否是闰年:",calendar.isleap(2016), calendar.isleap(2017))
print("leapdays()返回两年之间的闰年总数:",calendar.leapdays(2000, 2013))
print("month()返回某年某月的日历:",calendar.month(2021, 10))
"""October 2021
Mo Tu We Th Fr Sa Su
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
"""
print("calendar.monthcalendar()返回装着某年某月日历的二维列表:")
print(calendar.monthcalendar(2021, 1))
print("calendar.monthrange()返回包含了两个整数的元组,分别是某年某月第一天是周几,该月有多少天:")
print(calendar.monthrange(2021, 1))
print("setfirstweekday()设置一周的起始日期码,默认一周第一天为0,即周一:")
calendar.setfirstweekday(1)
print(calendar.firstweekday())
print("weekday()返回某年某月某日是周几:",calendar.weekday(2021, 1, 25))
16.math
16.1 作用
可以对数值进行数学运算
16.2 导入
import math
16.3 常用方法及说明
方法 |
说明 |
math.cos() |
求一个数值的余弦值 |
math.ceil() |
向上取整 |
math.floor() |
向下取整 |
math.fabs() |
取绝对值,并用浮点数形式保存 |
math.factorial() |
取阶乘 |
math.fmod() |
取余运算 |
math.fsum() |
求和 |
math.isnan() |
判断是否是非数值 |
math.sqrt() |
开根号 |
16.4 示例
import math
print("返回PI的值:",math.pi)
print("返回e的值:",math.e)
print("次方运算:",math.pow(5, 2))
print("开方运算:",math.sqrt(64))
print("对数运算:",math.log(100, 10))
print("返回已2为底x的对数:",math.log2(3))
print("返回以10为底x的对数:",math.log10(1000))
print("求和:",math.fsum([3,4,5]))
print("取余运算:",math.fmod(8, 3))
print("向上取整:",math.ceil(8.3))
print("向下取整:",math.floor(8.3))
17.uuid
17.1 作用
通用唯一识别码
17.2 导入
import uuid
17.3 常用方法及说明
方法 |
说明 |
uuid.uuid1() |
从MAC地址,序列号和当前时间生成UUID |
uuid.uuid3() |
里面的namespace和具体的字符串都是我们指定的,使用MD5生成UUID |
uuid.uuid4() |
生成一个随机UUID |
uuid.uuid5() |
此方法和uuid3写法是一样的,只不过是使用sha1生成UUID |
17.4 示例
import uuid
name = "python"
print(uuid.uuid1())
print(uuid.uuid5(uuid.NAMESPACE_URL,name))
print(uuid.uuid3(uuid.NAMESPACE_DNS,name))
print(uuid.uuid4())
fd582a14-31a7-11ec-ace4-84c5a65bdcfd
344979f2-3e10-505c-89bf-2d5c0fefed8d
c9f8b609-b81e-3c95-8188-914324e741c8
c7e3d006-16ff-4110-8b70-7678feb36387
18.Queue
18.1 作用
提供了同步的、线程安全的队列类
18.2 导入
from queue import Queue
18.3 常用方法及说明
方法 |
说明 |
Queue.qsize() |
返回队列的大小 |
Queue.empty() |
如果队列为空,返回True,反之False |
Queue.full() |
如果队列满了,返回True,反之False,Queue.full 与 maxsize 大小对应 |
Queue.get([block[, timeout]]) |
获取队列,timeout等待时间 |
Queue.get_nowait() |
相当于Queue.get(False),非阻塞方法 |
Queue.put(item) |
写入队列,timeout等待时间 |
Queue.task_done() |
在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号。每个get()调用得到一个任务,接下来task_done()调用告诉队列该任务已经处理完毕。 |
Queue.join() |
实际上意味着等到队列为空,再执行别的操作 |
18.4 示例
from queue import Queue
q = Queue(maxsize=5)
q.put('a')
q.put('b')
q.put('c')
q.put('d')
q.put('e')
print("返回队列的大小:",q.qsize())
if q.full():
for x in range(5):
print(q.get())
else:
print("为空判断:",q.empty())
19.logging
19.1 作用
提供日志的包
19.2 导入
import logging
19.3 常用方法及说明
方法 |
说明 |
logging.debug() |
输出debug日志 |
logging.info() |
输出info日志 |
logging.warning() |
输出warning日志 |
logging.error() |
输出error日志 |
logging.critical() |
输出critical日志 |
logging.Logger.setLevel() |
设置日志级别 |
logging.Logger.addHandler() |
添加一个handler |
logging.Logger.removeHandler() |
删除一个handler |
logging.Logger.addFilter() |
添加过滤 |
logging.Handler.setLevel() |
设置日志级别 |
logging.Handler.setFormatter() |
设置日志格式化 |
19.4 示例
import logging
logger = logging.getLogger(__name__)
logger.setLevel(level=logging.DEBUG)
handler = logging.FileHandler('my.log')
formatter = logging.Formatter(
fmt='%(asctime)s | %(levelname)s | %(name)s | %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.debug("debug日志")
logger.info("info日志")
logger.warning("warning日志")
logger.error("error日志")
logger.critical("critical日志")
2021-10-20 22:47:39 | DEBUG | __main__ | debug日志
2021-10-20 22:47:39 | INFO | __main__ | info日志
2021-10-20 22:47:39 | WARNING | __main__ | warning日志
2021-10-20 22:47:39 | ERROR | __main__ | error日志
2021-10-20 22:47:39 | CRITICAL | __main__ | critical日志
20.copy
20.1 作用
拷贝数据类型
20.2 导入
import copy
20.3 常用方法及说明
方法 |
说明 |
copy.copy() |
浅拷贝 |
copy.deepcopy() |
深拷贝 |
20.4 示例
import copy
lst1 = ["a",1,["b",2]]
lst2 = copy.copy(lst1)
lst3 = copy.deepcopy(lst1)
print("两个列表的值是否相等:",lst2 == lst3)
print("是否是同一对象:",lst2 is lst3)
lst1[2][0] = "c"
print(lst2)
print(lst3)