内置模块
目录
常用内置模块collections模块
1.具名元组
from collections import namedtuple
#表示二位坐标系
n1 = namedtuple('车', ('num name')) # 可以用空格分开表示
res1 =n1(1, '轿车')
res2 =n1(2,'老爷车')
print(res1,res2)
print(res1.num, res2.name)
队列
队列与堆栈
队列:先进先出
堆栈:先进后出
2.deque
from collections import deque
d = deque([1,2,3])
print(d.pop())
print(d.popleft())
3.defaultdict
values = [11, 22, 33,44,55,66,77,88,99,90]
my_dict = {}
for value in values:
if value>66:
if my_dict.has_key('k1'):
my_dict['k1'].append(value)
else:
my_dict['k1'] = [value]
else:
if my_dict.has_key('k2'):
my_dict['k2'].append(value)
else:
my_dict['k2'] = [value]
原生字典解决方法
from collections import defaultdict
values = [11, 22, 33,44,55,66,77,88,99,90]
my_dict = defaultdict(list)
for value in values:
if value>66:
my_dict['k1'].append(value)
else:
my_dict['k2'].append(value)
defaultdict字典解决方法
4.ordereddict顺序字典
>>> from collections import OrderedDict
>>> d = dict([('a', 1), ('b', 2), ('c', 3)])
>>> d # dict的Key是无序的
{'a': 1, 'c': 3, 'b': 2}
>>> od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
>>> od # OrderedDict的Key是有序的
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
>>> od = OrderedDict()
>>> od['z'] = 1
>>> od['y'] = 2
>>> od['x'] = 3
>>> od.keys() # 按照插入的Key的顺序返回
['z', 'y', 'x']
5.counter
from collections import Counter
c = Counter('asdhjgajksd')
print(c)
常用内置模块时间模块
1.time
import time
"""
三种时间表现形式
1.时间戳
秒数
2.结构化时间
主要是给计算机看的 人看不适应
3.格式化时间
主要是给人看的
"""
time.time() # 获取当前时间戳
time.localtime()
'''
time.struct_time(tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=11, tm_min=32, tm_sec=50, tm_wday=2, tm_yday=292, tm_isdst=0)
'''
time.strftime("%Y-%m-%d %H:%M:%S")
time.strftime("%Y-%m-%d %X")
time.sleep(1) # 运行到这停止多少秒
2.datetime
from datetime import time,datetime,data
print(datetime.now())
print(datetime.today())
print(datetime.utcnow()) #
print(datetime.strftime()) #
'''
datetime 年月日 时分秒
date 年月日
time 时分秒
'''
data.now() # 时分秒
print(datetime.strptime('2022-10-19','%Y-%m-%d'))
print(datetime.strftime(datetime.today(),'%Y-%m-%d'))
# print(datetime.time().day)
print(time.strptime('2022-10-19', '%Y-%m-%d'))
print(datetime.today()+timedelta(weeks=1))
datetime.timedelta(days = 3)
date
print(date.today())
print(date.today().strftime('%Y-%m-%d'))
print(date.today().timetuple()) # 结构化时间
print(date.today().year)
print(date.today().replace(2019)) # 替换时间
print(date.today().ctime())
print(date.today().toordinal())
print(date.today().weekday())
常用内置模块随机数模块
random 模块
import random
random.random() # 返回一个0~1之间的小数
random.randint(1,10) # 返回一个顾头顾尾的,随机一个整数
random.randrange(1,10,2) # 跟randint类似,但是randrange可以有步长
random.choice([1,2,3]) # 可迭代对象随机抽取一个返回
random.choices([1,2,3,4,5,6])#返回抽取的数据,以列表套原数据类型返回
random.simple('akjsghd',2)#返回抽取的指定个数数据,以列表套原数据类型返回
l1= [1,2,3,4]
random.shuffle(l1) #放可变数据类型,可以随机打乱顺序,然后返回
'''产生图片验证码: 每一位都可以是大写字母 小写字母 数字 4位'''
import string
import random
def get_code(num):
code = ''
for i in range(num):
data = string.ascii_lowercase + string.ascii_uppercase + string.digits
code += random.choice(data)
return code
print(get_code(10))
string模块
import string
string.ascii_lowercase # 全部小写字母
string.ascii_uppercase # 全部大写字母
string.digits #0-9数字
os模块(重要)
import os
#与操作系统打交道
#创建文件
os.mkdir('d1') #创建文件夹,创建单层
os.makedirs('d1\d2\d3') # 可以创建多层
#删除文件夹
os.rmdir('di') # 删除文件夹删除单层
os.removedirs('d1\d2\d3') # 可以删除多层空文件夹,如果文件夹有文件则不会删除
#可指定查看文件夹内容
os.listdir(r'c:\\') # 查看指定路径下一级文件
os.walk(r'E:\pythonworkftp\16') # 查看指定路径下所有层级文件,生成器类型
#删除指定文件
os.remove('tt2.py')
#获取当前文件所在项目环境变量文件
os.getcwd()
#切换系统环境变量文件夹
os.chdir(r'E:\pythonworkftp\16\d1\d2')
#获取当前用户登录姓名
os.getlogin()
#重名命文件
os.rename(r'E:\pythonworkftp\16\d1\a.py',r'E:\pythonworkftp\16\d1\d2\a.py')
print(os.path.dirname(r'E:\pythonworkftp\16\d1\d2\a.py')) #查看当前文件所在的文件夹
print(os.path.abspath(r'd1\d2\a.py')) #查看文件的绝对路径
print(os.path.exists(r'E:\pythonworkftp\16\d1\d2\a.py')) # 查看文件或文件夹是否存在
print(os.path.join(r"E:\pythonworkftp\16\d1\d2",'a')) #路径拼接,不要手动拼接路径
print(os.path.isfile(r'E:\pythonworkftp\16\d1\d2\a.py')) # 查看文件是否是文件
print(os.path.sep) # 返回运行计算机文件分隔符
print(os.path.getsize(r'E:\pythonworkftp\16\d1\d2\a.py')) # 获取文件大小字节类型
print(os.stat(r'E:\pythonworkftp\16\d1\d2\a.py').st_size) # 获取文件大小字节类型
print(os.path.getmtime(r'E:\pythonworkftp\16\d1\d2\a.py')) # 获取文件创建时间戳
sys模块
import sys
#与解释器打交道
print(sys.path) # 执行文件系统环境
print(sys.version)
# sys.exit() # 退出系统
print(sys.getrecursionlimit()) # 获取最大递归深度
print(sys.setrecursionlimit(2000)) # 设置最大递归深度
print(sys.getrecursionlimit())
print(sys.argv) # 一个列表第一个为获取数据的当前文件绝对路径
print(sys.getwindowsversion()) # 获取系统详细版本
json模块(重要)
json模块也称为序列化模块 序列化可以打破语言限制实现不同编程语言之间数据交互
json格式数据作用
json格式数据的形式
字符串类型并且引号都是双引号
json相关操作
针对数据
json.dumps() #反序列化
json.loads() # 序列化对象
针对文件
json.dump()
json.load()
json模块补充
import json
d = {'name': 'jason老师', 'pwd': 123}
res = json.dumps(d) # 针对中文会自动转码 我们在查看的时候不方便
print(res)
res = json.dumps(d, ensure_ascii=False) # 取消转码
print(res)
json模块实战
用户登录注册功能
import os
import json
# 注册功能
# 1.获取执行文件所在的目录路径
base_dir = os.path.dirname(__file__) # D:/pythonProject03/day19
# 2.拼接出db目录的路径
db_dir = os.path.join(base_dir, 'db') # D:/pythonProject03/day19/db
# 3.创建db目录
if not os.path.isdir(db_dir):
os.mkdir(db_dir)
# 4.获取用户数据
# username = input('username>>>:').strip()
# password = input('password>>>:').strip()
# 4.1.判断用户名是否已存在
# print(os.listdir(db_dir)) # ['jason.json', 'kevin.json', 'tony.json'] 方式1
# user_file_path = os.path.join(db_dir, f'{username}.json') 方式2
# 5.构造用户字典
# user_dict = {
# 'username': username,
# 'password': password,
# 'account': 15000, # 账户余额
# 'shop_car': [] # 购物车
# }
# 6.拼接存储用户数据的文件路径
# user_file_path = os.path.join(db_dir, f'{username}.json') # D:/pythonProject03/day19/db/jason.json
# 7.写入文件数据
# with open(user_file_path,'w',encoding='utf8') as f:
# json.dump(user_dict, f)
username = input('username>>>:').strip()
# 1.拼接上述用户名组成的文件路径
target_user_file_path = os.path.join(db_dir, f'{username}.json')
if not os.path.isfile(target_user_file_path):
print('你赶紧滚蛋 用户名都不对 搞什么飞机')
else:
password = input('password>>>:').strip()
# 2.获取用户真实数据字典
with open(target_user_file_path,'r',encoding='utf8') as f:
real_user_dict = json.load(f)
if password == real_user_dict.get('password'):
print('登录成功')
else:
print('密码错误')