常用内置模块之collections模块
1.namedtuple 具名元组(给元祖内的数据起名字,可以通过该名字访问元组内对应的元素)
from collections import namedtuple
eg:
point = namedtuple('坐标', ['x', 'y'])
p1 = point(158, 236)
print(p1) # 坐标(x=158, y=236)
print(p1.x) # 158
print(p1.y) # 236
2.deque 双端队列,一边进一边出
适用于队列和堆栈
队列:先进先出
堆栈:先进后出
3.Counter 计数器
import collections
l1 = 'aasadhxjasdgf'
l2 = collections.Counter(l1)
print(l2)
# Counter({'a': 4, 's': 2, 'd': 2, 'h': 1, 'x': 1, 'j': 1, 'g': 1, 'f': 1})
4.OrderdDict 有序字典
dict定义的字典是无序的,在对字典做迭代时无法确定字典的顺序,使用OrderdDict可以使字典变成有序的
5.defaultdict 带有默认值的字典
常用内置模块之时间模块
import time
'''
python中时间的三种表现形式
1.时间戳
秒数
2.结构化时间
呈现给计算机的
3.格式化时间
我们正常看到的计算机上的时间
'''
时间戳
print(time.time()) # 1666166648.590836
结构化时间
print(time.localtime())
# time.struct_time(tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=16, tm_min=4, tm_sec=8, tm_wday=2, tm_yday=292, tm_isdst=0)
格式化时间相关操作
print(time.strftime('%Y-%m-%d')) # 2022-10-19
print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2022-10-19 16:21:37
print(time.strftime('%Y-%m-%d %X')) # 2022-10-19 16:22:34
格式化时间转为结构化时间
print(time.strptime('2022-10-19', '%Y-%m-%d'))
# time.struct_time(tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=292, tm_isdst=-1)
time.sleep() # 让程序原地阻塞指定秒数
from datetime import date, datetime
print(datetime.now()) # 2022-10-19 16:17:18.920368
print(datetime.today()) # 2022-10-19 16:17:18.920368
print(datetime.utcnow()) # 2022-10-19 08:17:18.920368
print(date.today()) # 2022-10-19
指定时间
c = datetime(2023, 8, 8, 8, 8)
print('世界毁灭时间:', c) # 世界毁灭时间: 2023-08-08 08:08:00
输出格式化时间
d=datetime.strptime('2017/9/30','%Y/%m/%d')
print(d)
常用内置模块之随机数模块
import random
random.random() # 随机产生一个0到1之间的小数
random.randint(1, 6) # 随机产生一个1到6之间的整数
random.randrange(1, 100, 3) # 相当于随机在range(1, 100, 3)里面随机挑选一个数
random.choice() # 在括号内指定的数据集中随机抽取一个数
a = random.choice([1, 2, 3, 4, 5, 6])
print(a) # 2
random.choices() # 与choice作用一样
b = random.choices([1, 2, 3, 4, 5, 6])
print(b) # [2]
random.sample() # 随机抽取指定样本数
c = random.sample([1, 2, 3, 4, 5, 6, 7, 8, 9], 2)
print(c) # [4, 6]
random.shuffle() # 随机打乱给定的数据集
l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
random.shuffle(l1)
print(l1) # [9, 7, 4, 3, 5, 2, 8, 6, 1]
OS模块
OS模块主要与代码运行所在的操作系统打交道
import os
1.创建目录/文件夹(***)
1.os.mkdir() 只能创建单级目录,不能创建多级目录
2.os.makedirs() 可以创建单级目录,也可以创建多级目录
2.删除目录/文件夹
1.os.rmdir() 可以删除单级目录,但是不能删除多级目录而且也不能删除空的单级目录
2.os.removedirs() 可以删除多级目录,但是只能删除空的多级目录
3.列举出指定目录下的内容名称(**)
os.listdir()
4.删除/重命名文件
1.os.remove() 删除文件
2.os.rename() 重命名文件
os.rename(r'a.txt', r'b.txt') # 第一个为原文件名,第二个为新的文件名
5.获取/切换当前工作目录
1.os.getcwd() 获取当前工作目录
2.os.chdir() 切换当前工作目录 # 括号内填写需要切换到的目录
6.动态获取项目根路径(*****)
1.os.path.abspath(__file__) 获取执行文件的绝对路径
print(os.path.abspath(__file__)) # D:\PyCharm\练习\练习1.py
2.os.path.dirname(__file__) 获取执行文件所在的目录路径
print(os.path.dirname(__file__)) # D:/PyCharm/练习
7.判断路径/目录/文件是否存在
1.os.path.exists() 括号内放的是文件则判断文件路径是否存在,放的是目录则判断目录是否存在
print(os.path.exists(r'a.py')) # 判断该文件路径是否存在
print(os.path.exits(r'D:\PyCharm\练习')) # 判断该目录是否存在
2.os.path.isfile() 判断是否是文件
print(os.path.isfile(r'a.py')) # True
print(os.path.isfile(r'D:\PyCharm\练习')) # False
3.os.path.isdir() 判断是否是路径/目录
print(os.path.isdir(r'a.py')) # False
print(os.path.isdir(r'D:\PyCharm\练习')) # True
8.路径拼接(**)
os.path.join()
s1 = r'D:\PyCharm\练习'
s2 = r'a.py'
print(os.path.join(s1, s2))
9.获取文件大小(以字节为单位)
os.path.getsize()
sys模块
import sys
1.sys.path 获取执行文件的sys.path
2.sys.getrecursionlimit() 获取python解释器的最大递归深度,括号内填写数字可以修改
3.sys.version 获取解释器版本
json模块
json模块也称为序列化模块,它可以打破语言之间的限制,实现不同语言之间的数据交互
json格式数据的形式
字符串类型,且引号都是双引号
json模式相关操作
d = {'name':'jason','pwd':123}
针对数据
1.json.dumps() 将数据转为json格式
res = json.dumps(d)
print(res, type(res))
# {"name": "jason", "pwd": 123} <class 'str'>
2.json.loads() 把json格式的字符串转为编程语言可以识别的数据类型
res1 = json.loads(res)
print(res1, type(res1))
# {'name': 'jason', 'pwd': 123} <class 'dict'>
针对文件
1.json.dump() 将数据转为json格式并写入文件
with open(r'a.txt', 'w', encoding='utf8') as f:
json.dump(d, f)
2.json.load() 从文件中读取json格式的数据并转为编程语言可以识别的数据类型
with open(r'a.txt', 'r', encoding='utf8') as f:
res = json.load(f)
print(res, type(res))
# {'name': 'jason', 'pwd': 123} <class 'dict'>
os、json代码实战
使用模块编写用户登录注册功能
import json
import os
def register():
'''
用户数据存储在db文件夹中,单用户单文件
'''
# 1.先获取执行文件所在目录
zyg_path = os.path.dirname(__file__) # 获取执行文件所在目录
# 2.在执行文件所在目录下创建db文件夹
db_dir = os.path.join(zyg_path, 'db') # 拼接db文件的路径
if not os.path.isdir(db_dir): # 判断db路径是否已存在
os.mkdir(db_dir) # 创建db文件路径
# 3.db文件夹创建完毕后用户注册
username = input('请输入用户名:').strip()
db_dir_list = os.listdir(db_dir) #以列表的形式列举出db文件夹下的所有文件名
for i in db_dir_list:
if username == i.strip('.json'): # 判断用户名是否已存在
print('用户名已存在')
return
username_dir = os.path.join(db_dir, f'{username}.json')
# 拼接出用户文件路径
password = input('请输入密码:').strip()
user_dict = {'username': username, 'password': password}
# 将用户数据组织成字典
with open(username_dir, 'w', encoding='utf8') as f:
# 将用户数据以json形式写入
json.dump(user_dict, f)
return register
def login():
username = input('请输入用户名:')
password = input('请输入密码')
real_dir = os.path.dirname(__file__) # 获取执行文件所在目录
db_dir = os.path.join(real_dir, 'db') # 拼接出db文件目录
username_join = os.path.join(db_dir, f'{username}.json')
# 拼接出用户文件路径
if not os.path.isfile(username_join): # 判断用户文件路径是否已存在
print('用户名错误')
else:
with open(username_join, 'r', encoding='utf8') as f: #
real_name = json.load(f)
if username ==real_name.get('username') and password == real_name.get('password'):
print('登录成功')
else:
print('密码错误')
func_dict = {'1':register, '2':login, '0':quit}
while True:
print('0.退出\n1.注册\n2.登录')
choise = input('请选择功能')
if choise in func_dict:
func_dict.get(choise)()
else:
print('无此功能编号呢')
浙公网安备 33010602011771号