常用内置模块之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('无此功能编号呢')


posted on 2023-04-05 21:28  zyg111  阅读(49)  评论(0)    收藏  举报