常用内置模块

175 阅读7分钟

collections模块

在内置数据类型的基础上,collections模块为我们提供了更多的数据类型
1.namedtuple(具名元组)
定义语法:nametuple('元组名称','属性列表')
eg:
    from collections import namedtuple
    nametuple1 = namedtuple('坐标', ['x', 'y'])
    aa = nametuple1(1, 2)
    print(aa)  # 坐标(x=1, y=2)
    print(aa.x)  # 1  
    nametuple2 = namedtuple('三维坐标',['x','y','z'])
    bb = nametuple2(11,22,33)
    print(bb)  # 三维坐标(x=11, y=22, z=33)
    print(bb.y)  # 22
2.deque(双向列表 双端队列)
普通的列表添加删除操作只能从最后一个数据值开始,deque的appendleft和popleft支持我们从列表头部添加删除元素值。
定义语法:deque(['数据值1','数据值2'])
eg:
    from collections import deque
    a = deque([1,2,3])
    a.appendleft(11)
    print(a)  # deque([11, 1, 2, 3])
3.OrderedDict(有序字典)
普通的字典内部元素是无序的
    d = dict([('a', 1), ('b', 2), ('c', 3)])
    print(d)  # {'a': 1, 'c': 3, 'b': 2}
要保证key的顺序可以使用有序字典   
    from collections import OrderedDict
    d = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
    print(d)  # OrderedDict([('a', 1), ('b', 2), ('c', 3)])
4.defaultdict
有如下值集合 [11,22,33,44,55,66,77,88,99,90],
将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中
    from collections import defaultdict
    res = defaultdict(k1=[],k2=[])
    print(res)
5.Counter(计数器)
快速地得出各个字符在字符串中的个数
eg:
	res = 'abcdeabcdabcaba'
    1.for循环做:
    new_dict = {}
    for i in res:
        if i not in new_dict:
            new_dict[i] = 1
        else:
            new_dict[i] += 1
    print(new_dict)  # {'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1}
    2.计数器做
    from collections import Counter
    res1 = Counter(res)
    print(res1)  # Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})

time模块

表示时间的三种的方式:
1.时间戳  time.time() # 1657786415.2864366
2.结构化时间  time.gmtime(1657786415.2864366)  
# time.struct_time(tm_year=2022, tm_mon=7, tm_mday=14, tm_hour=8, tm_min=13, tm_sec=35, tm_wday=3, tm_yday=195, tm_isdst=0)
time.localtime()  # 当前时区的结构化时间
3.格式化时间  time.strftime("%Y-%m-%d %H-%M-%S")  # 2022-07-14 16:23:40
%Y %m %d %H %M %S 分别表示年月日时分秒
其中月日必须小写,HMS 可以缩写为 X

4.png

5.png

01 各个类型时间的相互转换

datetime模块

import datetime
res = datetime.datetime.today()  # 2022-07-15 14:38:21.386788  获取当前时间,精确到秒
res1 = datetime.date.today()  # 2022-07-15  获取当前时间,精确到天
print(res.hour)  # 7
print(res1.day)  # 15  两者都可以分别取单个值(年月日,时分秒)

print(datetime.datetime.now())  # 2022-07-15 14:46:02.207051  获取当前datetime
print(datetime.datetime.utcnow())  # 2022-07-15 06:46:02.207051  获取当前格林威治时间
'datetime.now 与 datetime.utcnow 也可以获取当前时间'

t1 = datetime.timedelta(days = 3)
print(res1 + t1)  # 2022-07-18  输出res1过了三天之后的时间
timedelta括号里有许多种参数,没有的时间可以通过换算得来 

os模块

os模块主要是跟当前程序所在的操作系统打交道
import os
1.生成与删除目录(文件)
os.mkdir('aaa')  # 生成单级目录
os.makedirs('bbb/ccc')  # 生成多级目录,也可生成单级目录
os.rmdir('aaa')  # 删除单级空目录,若目录不为空或是多级目录则报错
os.removedirs('bbb/ccc')  # 若目录为空则删除,并向上递归,若上一级目录也为空,也删除,以此类推
os.remove('aaa.txt')  # 删除单个文件,不能删除文件夹

2.文件列举与重命名
os.rename('aaa', 'bbb')  # 重命名文件夹或单个文件
os.listdir('D:\Python\pycharmProject\day24')  # ['.idea', '01 datetime模块.py', '02 os模块.py', 'bbb']
# 列出指定文件夹下的所有文件和目录,包括隐藏文件,并以列表的形式打印

3.获取绝对路径
print(os.getcwd())  # D:\Python\pycharmProject\day24 获取当前文件所在的绝对路径
os.chdir("dirname")  # 改变当前脚本工作目录;相当于shell下cd
print(os.path.abspath(__file__))  # D:\Python\pycharmProject\day24\02 os模块.py  获取当前文件所在的绝对路径
print(os.path.dirname(__file__))  # D:\Python\pycharmProject\day24  获取当前文件所在的目录路径

4.判断文件(夹)是否存在
# exists
print(os.path.exists('01 datetime模块.py'))  # True
print(os.path.exists('ccc'))  # False
print(os.path.exists('bbb'))  # True
若参数文件(夹)在当前文件所在路径中(参数文件和当前文件在同一个目录下),返回True,否则返回False
# isfile  isdir 
print(os.path.isfile('bbb'))  # False
print(os.path.isfile('ccc'))  # False
print(os.path.isfile('02 os模块.py'))  # True
(在当前文件所在路径中)若参数是一个存在的文件,返回True
print(os.path.isdir('bbb'))  # True
print(os.path.isdir('ccc'))  # False
print(os.path.isdir('02 os模块.py'))  # False
(在当前文件所在路径中)若参数是一个存在的文件夹,返回True

5.拼接路径
absolute_path = os.path.dirname(__file__)  # 获取当前文件所在目录的路径
relative_path = 'aaa.txt'  # 需要拼接文件的路径
res = os.path.join(absolute_path, relative_path)  # 拼接后的路径
print(res)  # D:\Python\pycharmProject\day24\aaa.txt
# 拼接路径用join方法。不要使用+号。
# join可以自动识别当前所在的操作系统,并切换正确的分隔符
# win用\ mac用/

6.文件大小相关
print(os.path.getsize('01 datetime模块.py'))  # 510 获取指定文件的大小,单位:字节

1.png

02 单级目录aaa和多级目录bbb/ccc已被创建

2.png

03 步骤02创建的两个目录已被删除

3.png

04 文件夹aaa已被改名为bbb

4.png

05 判断文件(夹)是否存在

sys模块

sys模块主要是跟python解释器打交道
import sys
print(sys.path)  # 获取当前文件的所有path路径,结果以列表形式返回
print(sys.version)  # 查看解释器信息
print(sys.platform)  # 查看当前平台

res = sys.argv
'''需求 命令行执行当前文件必须要提供用户名和密码 否则不准执行'''
if len(res) == 3:
    username = res[1]
    password = res[2]
    if username == 'jason' and password == '123':
        print('您可以正在执行该文件')
    else:
        print('用户名或密码错误')
else:
    print('请填写用户名和密码 二者不可或缺')
# 上述校验也可以使用异常捕获实现(课下实现)

json模块

1. json模块也被称为序列化模块,json、主要作为各个编程语言间数据交互的桥梁。可以把json理解为中间商或者翻译官。
python                    js
列表  <===>  json  <===>  数组
'将原本的列表、字典等转成json格式就叫序列化'
'将json格式再变为原来的列表、字典就叫反序列化'
2. 数据基于网络传输肯定是二进制,呢么在python中只有字符串可以调用encode方法转成二进制数据,索引json格式的数据也属于字符串。
3. json格式的特征
   json是字符串   有标志性的双引号
   例如:{"name": "jason", "age": 19}  # 长得像字典,其实是json字符串
4. json的四个主要方法
	dumps()  将其他数据类型转化成json格式字符串
	loads()  将json字符串转化成对应的数据类型
	dump()   将其他数据类型以json格式写入文件
	load()   将文件中的json字符串读取出来并转换成相应数据类型
5. json方法实操   
d = {'name': 'jason', 'pwd': 123}
需求:将上述字典存入文件中,并且取出来还是字典
    d = {'name': 'jason', 'pwd': 123}
    with open(r'user.txt', 'w', encoding='utf8') as f:
        d = json.dumps(d)
        f.write(d) 
        # 这两句可以简写为
        #  json.dump(d,f)
    with open(r'user.txt', 'r', encoding='utf8') as f:
        res = f.read()
        d = json.loads(res) 
        # 这两句可以简写为
        #  d = json.load(f)
        print(d)

json与os模块混合使用

import os
import json
#  获取当前文件的根目录
base_path = os.path.dirname(__file__)
# 如果db文件夹不存在则创建
if not os.path.exists('db'):
    os.mkdir('db')
#  拼接db文件夹
db_path = os.path.join(base_path, 'db')
# 获取输入 并判断有无该用户文件
username = input('username>>>').strip()
password = input('password>>>').strip()
# 获取db文件夹下的所有用户文件 列表
user_list = os.listdir(db_path)
# 构建用户字典
user_dict = {
    'username': username,
    'password': password,
    'balance': 15000,
    'shop_car': []
}
# 用户文件路径
user_path = os.path.join(db_path, username)
if username not in user_list:
    with open(user_path, 'w', encoding='utf8') as f:
        json.dump(user_dict, f)
else:
    with open(user_path, 'r', encoding='utf8')as f:
        res = json.load(f)
        print(res, type(res))

10.png

06 操作代码展示

5.png

07 代码效果:在day24下新建db文件夹,在文件夹内新建用户文件:tony