马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
0) 参考文章
- Python常用模块大全(总结)_python模块-CSDN博客
- Python24个常用模块,编程学习必备知识库!_python常用模块-CSDN博客
- 小白必备:Python必须掌握的十大模块,建议收藏!_python必装的模块-CSDN博客
- Python尺度库(非常经典的各种模块先容)_python5.6常用的尺度模块-CSDN博客
1) 常用模块阐明
- random模块
- import random
- # (1) 生成0-1的随机浮点型数字
- print(random.random()) # 0-1之间的随机数
- print(round(random.random(), 3)) # 保留3位小数
- print(round(random.random() * 100)) # 0-100之间的随机数 默认不保留小数
- # 案例1: 投硬币
- # 完全随机 一样一半的
- def flip_coin():
- if random.random() >= 0.5:
- return "heads"
- else:
- return "tails"
- print(flip_coin())
- # (2) random.randint:返回a-b范围内的随机整形数字
- print(random.randint(1, 100)) # 指定范围 随机返回整型数字
- print(random.randint(1, 2))
- # 案例2: 掷骰子
- def roll_dice():
- return random.randint(1, 6)
- print(roll_dice())
- # (3) random.choice:对于一个序列对象随机选择一个元素
- print(random.choice([11, 22, 33, 44, 55])) # 对一个容器对象 随机选择元素
- # 案例3:
- def draw_prize():
- participants = ['Alice', 'Bob', 'Charlie', 'David', 'Eve']
- return random.choice(participants)
- print(draw_prize())
- # (4) random.sample:对于一个序列对象随机选择多个元素
- print(random.sample([11, 22, 33, 44, 55], 3)) # 选择三个元素
- def draw_prize():
- participants = ['Alice', 'Bob', 'Charlie', 'David', 'Eve']
- return random.sample(participants, 3)
- print(draw_prize())
- # 案例4:
- # 构建红色球
- ret = random.sample(range(1, 34), 6) # 在1-34个元素中选择六个
- ret = [str(i) for i in ret] # 将选择的元素转化成字符保存进列表中
- # j加入蓝色球
- ret.append(str(random.randint(1, 16))) # 在1-16中选择一个
- # print(ret)
- # ret容器中有七个元素,前六个是红球 最后一个是蓝色球
- # join拼接前六个元素
- print(f"红色球:{' '.join(ret[:-1])} \n蓝色球:{ret[-1]}")
- # (5) random.shuffle:打散顺序
- l = [1, 2, 3, 4, 5]
- random.shuffle(l) # 乱序
- print(l)
- # 案例5:
- def get_pokes():
- poke_list = []
- poke_types = ['♥️', '♦️', '♠️', '♣️']
- poke_nums = [2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A']
- for p_type in poke_types:
- for p_num in poke_nums:
- poke_list.append(f"{p_type}{p_num}")
- return poke_list
- poke_list = get_pokes()
- random.shuffle(poke_list) # 乱序输出
- print(poke_list)
复制代码- time模块
- import time
- """
- 1. 时间字符串: "2020/12 微博图片/12 微博图片"
- 2. 时间元组对象 : (2024,2,13,...)
- 3. 时间戳:
- 1970 1 1 0:0:0 0
- 1970 1 1 0:1:0 60s
- 1970 1 1 0:2:0 120s
- 1970 1 1 1:0:0 3600s
- """
- # (1) time.time():获取当前时间的时间戳
- print(time.time()) # 1728967581.212483
- print(time.time() / 3600 / 24 / 365) # 54.82520234692044
- # (2) time.sleep(10):让程序阻塞n秒钟
- print("start")
- time.sleep(1) # 阻塞IO输入输出1秒
- print("end")
- # (3) 获取当前时间元组对象
- print(
- time.localtime()) # time.struct_time(tm_year=2024, tm_mon=10, tm_mday=15, tm_hour=12 微博图片, tm_min=48, tm_sec=21, tm_wday=1, tm_yday=289, tm_isdst=0)
- print(time.localtime()[0]) # 2024年
- print(time.localtime()[1]) # 10月
- print(time.localtime()[2]) # 15日
- print("星期", time.localtime()[6] + 1) # 周2
- # (4) 时间戳和时间元组对象的相互转换
- # mktime: 将structtm时间结构体转换为自1970年1月1日起的秒数
- print(time.mktime(time.localtime())) # 1728967701.0
- print(time.time()) # 1728967701.4755197 十位时间戳
- print(time.gmtime(1707815699.0)) # time.struct_time(tm_year=2024, tm_mon=2, tm_mday=13, tm_hour=9, tm_min=14, tm_sec=59, tm_wday=1, tm_yday=44, tm_isdst=0)
- # (5) 将元组对象转为指定格式的时间字符串
- # strftime: 日期时间对象转换为指定格式的字符串
- print(time.strftime("%Y-%m-%d %H,%M,%S", time.localtime())) # 2024-10-15 12 微博图片,48,21
- print(time.strftime("%Y-%m-%d %X", time.localtime())) # 2024-10-15 12 微博图片:48:21
复制代码- datetime模块
- import datetime
- datetime.time
- datetime.date
- datetime.datetime
- datetime.timedelta
- # datetime.datetime:
- # (1) 创建日期对象
- # 获取当前日期对象
- now = datetime.datetime.now()
- print(now, type(now)) # 2024-10-15 12 微博图片:58:03.991463 <class 'datetime.datetime'>
- today = datetime.datetime.today()
- print(today, type(today)) # 2024-10-15 12 微博图片:58:03.992461 <class 'datetime.datetime'>
- # # 创建任意日期对象
- my_datetime = datetime.datetime(2020, 12, 23, 10, 0, 0)
- print("my_datetime:", my_datetime, type(my_datetime)) # my_datetime: 2020-12 微博图片-23 10:00:00 <class 'datetime.datetime'>
- # (2) datetime对象的属性 对象.变量名
- now = datetime.datetime.now()
- print(now.year) # 2024
- print(now.month) # 10
- print(now.day) # 15
- print(now.hour) # 12 微博图片
- print(now.minute) # 58
- print(now.second) # 3
- my_datetime = datetime.datetime(2020, 12, 23, 10, 0, 0)
- print(my_datetime.year) # 2020
- print(my_datetime.month) # 12 微博图片
- print(my_datetime.day) # 23
- print(my_datetime.hour) # 10
- print(my_datetime.minute) # 0
- print(my_datetime.second) # 0
- # (3) datetime对象和格式化字符串转换
- # 将对象转为字符串
- now = datetime.datetime.now()
- s = now.strftime("%Y/%m/%d %H:%M:%S")
- print(s) # 2024/10/15 12 微博图片:58:03
- # 将字符串转为对象
- timer = "2020 12 微博图片 20 10:0:0"
- parsed_datetime = datetime.datetime.strptime(timer, "%Y %m %d %H:%M:%S")
- print("parsed_datetime:", parsed_datetime) # parsed_datetime: 2020-12 微博图片-20 10:00:00
- print("parsed_datetime:", parsed_datetime.year) # parsed_datetime: 2020
- print("parsed_datetime:", parsed_datetime.month) # parsed_datetime: 12 微博图片
复制代码- import datetime
- # 二: datetime.date类
- # (1) 创建日期对象
- today = datetime.date.today()
- print(today) # 2024-10-15
- my_date = datetime.date(2020, 12, 20)
- print("my_date:", my_date, type(my_date)) # my_date: 2020-12 微博图片-20 <class 'datetime.date'>
- # (2) 对象的属性
- print(today.year) # 2024
- print(today.month) # 10
- print(today.day) # 15
- # (3) 将日期对象转为格式化字符串
- ret = my_date.strftime("%Y/%m/%d")
- print(ret) # 2020/12 微博图片/20
- # 二: datetime.timedelta:时间间隔
- # 案例1
- my_date01 = datetime.date(2020, 12, 20)
- my_date02 = datetime.date(2022, 1, 20)
- delta = my_date02 - my_date01
- print(delta.days) # 两个日期之间的间隔天数 396
- print(delta.total_seconds()) # 34214400.0 间隔的秒数
- # 案例2
- now = datetime.datetime.now()
- f_datetime = now + datetime.timedelta(weeks=1) # 当前时间 + 1周
- print(f_datetime) # 2024-10-22 13:02:01.335911
- b_datetime = now - datetime.timedelta(weeks=4) # 当前时间 - 4周
- print(b_datetime) # 2024-09-17 13:02:01.335911
复制代码- sys模块
- import sys
- # (1) 查询解释器的版本信息
- print(sys.version) # 3.9.12 微博图片 (tags/v3.9.12 微博图片:b28265d, Mar 23 2022, 23:52:46) [MSC v.1929 64 bit (AMD64)]
- # (2) 退出程序
- # sys.exit(0) # 退出当前运行的程序
- print("OK")
- # (3) sys.argv
- # sys.argv: 运行文件时,运行对应的参数
- print(sys.argv)
- user = input("请输入用户名:")
- pwd = input("请输入密码:")
- print(user, pwd)
- # 终端处运行 打印对应的元素,从1开始的索引
- # user = sys.argv[1]
- # pwd = sys.argv[2]
- # print(user, pwd)
复制代码- os模块
- import os
- # 一、文件和目录操作
- # (1) os.getcwd(): 获取当前工作目录的路径。
- print(os.getcwd()) # F:\python\02 python进阶\03 常用模块
- # (2) `os.chdir(path)`: 修改当前工作目录为指定路径。
- os.chdir("..")
- # os.chdir("../Day08:文件操作")
- print(os.getcwd()) # F:\python\02 python进阶
- # (3) os.listdir(path): 返回指定目录中的文件和目录列表。
- # print(os.listdir("/Users/yuanhao/PycharmProjects/Python全栈开发V3版/模块2:Python进阶/Day08:文件操作"))
- # (4) os.mkdir(path): 创建一个新的目录。
- # os.mkdir("apple")
- # (5) os.makedirs(path): 递归创建目录,包括中间目录。
- # os.makedirs("apple/banana/peach")
- # (6) os.remove(path): 删除指定的文件。
- # os.remove("abc.txt")
- # (7) os.removedirs(path): 递归删除目录,包括所有子目录。
- os.removedirs("apple/banana/peach")
- # (8) os.rename(src, dst): 将文件或目录从src重命名为dst。
- # os.rename("apple.txt","banana.txt")
复制代码- import os
- # 二、操作系统命令
- # (1) os.system(command): 执行操作系统命令。
- os.system("ls")
- os.system("ifconfig")
- # (2) os.popen(command): 执行操作系统命令,并返回一个文件对象。
- ret = os.popen("ls")
- print(ret.read())
- ret = os.popen("ifconfig")
- print(ret.read())
- os.popen("touch hello.txt")
- # 三、路径操作
- # (1) `os.path.join(path1, path2, ...)`: 将多个路径组合成一个路径。
- l = ["a","b","c"]
- print("\".join(l))
- print(os.path.join("a","b","c"))
- print(os.path.sep)
- # (2) 将路径分割成目录和文件名。
- ret = os.path.split("/Users/yuanhao/PycharmProjects/Python全栈开发V3版/模块2:Python进阶/Day09:常用模块/01 random模块.py")
- print(ret)
- # (3) `os.path.dirname(path)`: 返回路径的目录部分。`os.path.basename(path)`: 返回路径的文件名部分。
- path = "/Users/yuanhao/PycharmProjects/Python全栈开发V3版/模块2:Python进阶/Day09:常用模块/01 random模块.py"
- print(os.path.basename(path))
- print(os.path.dirname(path))
- # (4) `os.path.exists(path)`: 检查路径是否存在。
- print(os.path.exists("/Users/yuanhao/PycharmProjects/Python全栈开发V3版/模块2:Python进阶/Day09:常用模块/banana.txt"))
复制代码- json模块
- import json
- # 序列化 :将本语言支持的高级数据对象转为json格式字符串的过程
- num = 3.14
- name = 'yuan'
- l = [1, 2, 3]
- t = (4, 5, 6)
- d = {'name': "yuan", 'age': 18, "is_married": False, "gf": None}
- print(repr(json.dumps(num))) # '3.14'
- print(repr(json.dumps(name))) # '"yuan"'
- print(repr(json.dumps(l))) # '[1, 2, 3]'
- print(repr(json.dumps(t))) # '[4,5,6]'
- print(repr(json.dumps(d))) # '{"name":"yuan","age":18,"is_married":false,"gf":null}'
- # 存储和传输
- # 反序列化:将json格式字符串转为本语言支持的数据对象格式
- # 案例1
- d = {'name': "yuan", 'age': 18, "is_married": False, "gf": None}
- json_d = json.dumps(d)
- print(json_d, type(json_d)) # {"name": "yuan", "age": 18, "is_married": false, "gf": null} <class 'str'>
- data = json.loads(json_d)
- print(data, type(data)) # {'name': 'yuan', 'age': 18, 'is_married': False, 'gf': None} <class 'dict'>
- name = data.get("name")
- print(name) # yuan
- # 思考:
- # 案例2:
- s = '{"name":"yuan","age":18,"isMarried":False}'
- # 重点:反序列化前提数据得是json格式的字符串
- # data = json.loads(s) # 报错, 类型错误 不能转
- print(data, type(data)) # {'name': 'yuan', 'age': 18, 'is_married': False, 'gf': None} <class 'dict'>
- s2 = '[{"name":"yuan","age":18,"isMarried":false},{"name":"rain","age":28,"isMarried":true}]'
- data2 = json.loads(s2)
- print(data2, type(data2)) # [{'name': 'yuan', 'age': 18, 'isMarried': False}, {'name': 'rain', 'age': 28, 'isMarried': True}] <class 'list'>
- print(data2[1].get("name")) # rain
复制代码- import json
- # 持久化存储
- # (1) 序列化
- with open("data.json", mode="w") as f:
- data = {'name': "yuan", 'age': 18, "is_married": False, "gf": None}
- # 方式1
- # data_json = json.dumps(data)
- # data_json = str(data)
- # f.write(data_json)
- # 方式2
- json.dump(data, f)
- # (2) 反序列化
- with open("data.json") as f:
- # 方式1
- # data_json = f.read()
- # print(data_json, type(data_json))
- # data_dict = json.loads(data_json)
- # 方式2
- data_dict = json.load(f)
- print(data_dict, type(data_dict))
复制代码- """
- JS实现的序列化:对对象处理
- data = {user:"yuan",pwd:123}
- {user: 'yuan', pwd: 123}
- data
- {user: 'yuan', pwd: 123}
- // 序列化
- undefined
- JSON.stringify(data)
- '{"user":"yuan","pwd":123}'
- """
- import json
- s = '{"user":"yuan","pwd":123}'
- # (1) 反序列化请求数据
- data = json.loads(s)
- print(data, type(data)) # {'user': 'yuan', 'pwd': 123} <class 'dict'>
- user = data.get("user")
- pwd = data.get("pwd")
- # 数据库筛选
- user = {
- "name": "苑昊",
- "email": '123@qq.com',
- "gender": "male"
- }
- # (2) 序列化响应数据
- res = json.dumps(user)
- print(repr(res), type(res)) # '{"name": "\\u82d1\\u660a", "email": "123@qq.com", "gender": "male"}' <class 'str'>
- """
- res = '{"name": "\\u82d1\\u660a", "email": "123@qq.com", "gender": "male"}'
- // 反序列化
- // JSON.parse(res)
- // {name: '苑昊', email: '123@qq.com', gender: 'male'}
- res = JSON.parse(res)
- {name: '苑昊', email: '123@qq.com', gender: 'male'}
- res.name
- '苑昊'
- res.email
- '123@qq.com'
- """
复制代码- import json
- # 案例1
- user = {
- "name": "苑昊",
- "email": '123@qq.com',
- "gender": "male"
- }
- print(repr(json.dumps(user, ensure_ascii=False))) # '{"name": "苑昊", "email": "123@qq.com", "gender": "male"}'
- # 案例2
- data = {
- 1000: "apple",
- 2000: "banana",
- 3000: "peach",
- }
- print(repr(json.dumps(data))) # '{"1000": "apple", "2000": "banana", "3000": "peach"}'
- with open("data.json","w") as f:
- json.dump(data,f)
- with open("data.json") as f:
- data = json.load(f)
- print(data) # {'1000': 'apple', '2000': 'banana', '3000': 'peach'}
- print({int(k): v for k, v in data.items()}) # {1000: 'apple', 2000: 'banana', 3000: 'peach'}
- # 案例3
- user = {
- "name": "苑昊",
- "email": '123@qq.com',
- "gender": "male"
- }
- # separators: 设置键值对之间的分隔符
- print(repr(json.dumps(user, ensure_ascii=False,separators=(",",":"))))
- # '{"name":"苑昊","email":"123@qq.com","gender":"male"}'
- print(len('{"name":"苑昊","email":"123@qq.com","gender":"male"}')) # 50
复制代码- 日志
模块: logger
- from loguru import logger
- # 默认的输出格式是:时间、级别、模块、行号以及日志
内容。 - # 取消控制台输出流
- logger.remove(0)
- logger.add("mylog.log", level="WARNING", rotation="200 B")
- # 日志
记录 - logger.debug("这是一条测试日志")
- logger.info("这是一条正常日志")
- logger.success("这是一条成功日志")
- logger.warning("这是一条警告日志")
- logger.error("这是一条错误日志")
- logger.critical("这是一条严重错误日志")
复制代码- from loguru import logger
- import sys
- # 默认的输出格式是:时间、级别、模块、行号以及日志内容。
- logger.configure(handlers=[
- {
- # 控制台
- "sink": sys.stderr,
- "format": "<g>{time}</> <lvl>{level:10}</> |<c>{module:10}</>: {line:4} | <lvl>{message}</>",
- # "colorize": False,
- "level": "WARNING"
- },
- {
- # 日志文件
- "sink": "myLog2.log",
- "format": "<g>{time}</> <lvl>{level:10}</> | <c>{module:10}</>:{line:4} | <lvl>{message}</>",
- # "colorize": False,
- "level": "ERROR"
- }
- ])
- logger.add("myLog2.log", rotation="200 B")
- # 日志记录
- logger.debug("这是一条测试日志")
- logger.info("这是一条正常日志")
- logger.success("这是一条成功日志")
- logger.warning("这是一条警告日志")
- logger.error("这是一条错误日志")
- logger.critical("这是一条严重错误日志")
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|