【2022.7.15】python 多种内置模块的用法和作用

学习内容概要

  • 时间模块之datatime模块
  • os 模块
  • sys 模块
  • json 模块
  • json 模块的实参

内容详细

注意事项

  • 定义 py 文件名称时 尽量不要和模块名 (内置、第三方)发生名字上的冲突

datetime模块

"""
与之前学的time模块类型相似
time.time()
time.sleep()
都是与时间操作相关的模块
"""

# 模块名 :
datetime    年月日 时分秒
date        年月日

import datetime

res = datetime.datetime.today()
print(res)  # 2022-07-15 16:04:35.507085
res1 = datetime.date.today()
print(res1)  # 2022-07-15
print(res.year)  # 2022
print(res.month)  # 7 月
print(res.weekday())  # 4  是一个(0到6)之间的整数 也表示星期 但是从0开始计算
print(res.isoweekday())  # 5 星期5

# 模块名 :
timedelta括号内有很多参数
没有的时间可以通过换算得出

t1 = datetime.timedelta(days=4)
res1 = datetime.date.today()
print(res1)
print(res1 + t1)  # 2022-07-19
print(res1-t1)  # 2022-07-11

# 补充说明 :

rint(datetime.datetime.now())  # 2022-07-15 16:50:08.139104 现在时间
print(datetime.datetime.utcnow())  # 2022-07-15 08:50:08.139104 北半球时间
c =datetime.datetime(2008, 8, 8, 8, 8,8)
print('北京奥运会举办时间', c)  # 指定时间  北京奥运会举办时间 2008-08-08 08:08:08

os模块

  • 1.创建目录
import os

os.mkdir(r'aa')  # 创建单机目录
os.mkdir(r'aa\bb')  # 无法创建多级目录
os.makedirs(r'bb\cc\dd')  # 可以创建多级目录
os.makedirs(r'ee')  # 当然也可以创建单个目录
  • 2.删除目录
import os
os.rmdir(r'ee')  # 可以删除单级目录
os.rmdir(r'bb')  # 删除的该目录里不能有其他的数据 也不支持删除多级目录 
os.removedirs(r'aa')  # 可以删除目录 但是只针对无任何数据的目录 有数据的目录删不掉
os.removedirs(r'bb\cc\dd')  # 多层数据的删除 是从内而外递归删除空目录的  直到检测到有数据的目录停止删除
  • 3.列举指定路径下的文件名称(文件、目录)
import os
print(os.listdir())  # 以列表的形式获取到的当前路径下的所有目录以及文件
print(os.listdir(r'c:\\PyCharm 2021.1.3'))  # 也可以自己命令输入路径 ['bin', 'brokenPlugins.db', 'build.txt', 'classpath.txt', 'debug-eggs', 'help', 'icons.db', 'jbr', 'lib', 'license', 'plugins', 'product-info.json', 'skeletons']  

  • 4.重命名文件 删除文件
import os

# 重命名文件
os.rename(r'时间模块.py', r'时间 1 模块.py')  # 由时间模块.py 改为 时间1模块.py
os.rename(r'aa.txt', r'b.txt')  # 由aa.txt 改成 bb,txt
注意:必须在同一级目录下才可以操作重命名文件

# 删除文件
os.remove(r'a.txt')  # 有无内容直接可以删除
os.remove(r'mm.py')  # 直接删除

# 必须在同一级目录下才可以操作删除文件
  • 获取当前工作路径(所在的路径)绝对路径
print(os.getcwd())

print(os.getcwd())  # C:\pythonProject\7.15day 当前工作文件所在的路径
os.chdir(r'..')  # 配合 getcwd 切换路径使用 类似于cwd里的 cd
os.mkdir(r'文件')  # 可以随意在路径下插入文件就会在该路径下生成插入的文件
print(os.getcwd())  # C:\pythonProject
  • 6.与程序启动文件相关
print(os.path.abspath(__file__))  # 获取当前文件的绝对路径  C:\pythonProject\7.15day\os 模块.py
res = os.path.dirname(__file__)
print(res)  # 获取当前文件所在的目录路径  C:/pythonProject/7.15day
res1 = os.path.dirname(os.path.dirname(__file__))
print(res1)  # 嵌套可以提升到上一层级的路径  使用该模块 可以提升程序的兼容性 项目写好后 无论发到哪个设备上 都可以执行 
  • 7.判断路径是否存在(文件、目录)
import os

print(os.path.exists(r'll.py'))  # True
print(os.path.exists(r'bb'))  # True
print(os.path.exists(r'hh.py'))  # False
"""
可以判断目录、文件是否存在  目录 文件必须要在同一层级上才可以判断
"""
print(os.path.isdir(r'cc'))  # False
print(os.path.isdir(r'bb'))  # True
"""
判断目录(文件夹)是否存在 也必须在同一层级上 才能判断
"""
print(os.path.isfile(r'zz.txt'))  # True
print(os.path.isfile(r'll.py'))  # True
print(os.path.isfile(r'hh.py'))  # False
"""
判断 文件 是否存在 也必须在同一层级上 才能判断
"""
  • 拼接路径
"""
需求有一个 a.txt 的文件 想拼接到某一个文件的路径下 
"""
# 以往操作:
relative_path = 'a.txt'  
absolute_path = r'C:\pythonProject\7.15day\bb\cc\dd'
print(absolute_path + relative_path)
"""
设计到路径拼接 用 + 号的方法不严谨 因为会涉及到不同系统的路径分隔符不一样 + 号只能适用win系统  建议统一使用 os 模块里的 join 方法
"""
relative_path = 'a.txt'
absolute_path = r'C:\pythonProject\7.15day\bb\cc\dd'

res = os.path.join(absolute_path,relative_path)
print(res)
"""
os.path.join join方法可以自动识别当前所在的操作系统并自动切换正确的分隔符  更加的严谨 xindows 用\ mas用/

"""
  • 获取文件大小
"""
获取文件的大小 就是获取文件里有多少字节 单位是bytes
"""
print(os.path.getsize(r'时间模块.py'))  # 2209
print(os.path.getsize(r'zz.txt'))  # 16
"""
只能获取同层级的文件大小 不能获取其他层级的
"""

sys模块

import sys
print(sys.path)  # 结果是列表形式
print(sys.version)  # 当前解释版本信息
print(sys.platform)  # win32 查看当前品台

sys.argv
"""
主要适用于命令行 在命令行适用  命令行和程序做交互
"""
res = sys.argv

# 需求:命令行执行当前文件必须要提供用户名和密码 否则不准执行'''
解法1import sys
res = sys.argv
if len(res) == 3:
    username = res[1]
    password = res[2]
    if username == 'jason' and password == '123':
        print('您可以正在执行该文件')
    else:
        print('用户名或密码错误')
else:
    print('请填写用户名和密码 二者不可或缺')
    
解法二:
import sys
res = sys.argv
try:
    usrename = res[1]
    password = res[2]
except Exception as e:
    print('请输入用户名和密码')
else:
    if usrename == 'jaosn' and password == '123':
        print('执行')
    else:
        print('用户名或密码错误')

json模块

  • 理论:

json模块也称之为序列化模块

json模块可以实现不同编程语言之间的数据交互

A编程--- json --B编程

A编程想和B编程做合作做项目 但是因为编程语言 命令不同 无法直接交互

所以必须需要通过 json 在中间转换一下(就相当于外国人(A)和中国人(B)在一起交流不畅通 需要翻译才能交流 这个 json模块 就是充当翻译的角色

  • json格式的数据应该是什么?

  • 基于网络传输肯定是二进制

    ​ 在python中只有字符串才能调用encode转换为二进制类型 进行传输 所以 json 格式的数据也是属于字符串

  • json格式特征:

    ​ 必须是字符串 有双引号的标志

    例题演示:
    import json
    dict1 = {'name':'make','age':18}
    res = json.dumps(dict1)  # 序列化 将其他的数据类型统一转换为 json 格式的数据类型 以便于传输
    print(res,type(res))  # {"name": "make", "age": 18} <class 'str'>  # 把其他的数据类型转换为json格式字符串 有双引号标志
    
    # j = {"name": "make", "age": 18}  # json格式不能直接写入(文本文件除外) 必须是json格式转换的
    # print(j,type(j))  # {'name': 'make', 'age': 18} <class 'dict'> 自己写入后打印出的还是字典类型
    res1 = json.loads(res)  # 反序列化 将json格式的数据类型 转换为对应编程语音中的类型数据
    print(res1,type(res1))  # 因为在python编程系统打印的json格式的数据类型 所以转换为的是原本的字典数据类型
    
    
    """
    json dumps()  序列化
    json loads()  反序列化
    """
    # json 模块 基于文件存储 也提供了便捷的方式 想存入的数据类型不上字符串 只需要用下列方式转换一下 就可以了
    
    import json
    dict1 = {'name':'make','age':18}
    with open(r'zz.txt','w',encoding='utf8')as f:
            json.dump(dict1,f)  # 可以直接把要存入的数据写入文件 (自动转换成json格式)
    with open(r'zz.txt','r',encoding='utf8')as f:
    
        res = json.load(f)
        print(res)  # 读取时 还是原来的存入前的数据类型 没有改变
        
        
    """
    dump()      将其他数据类型以json格式字符串写入(w)文件
    load()      将文件中json格式字符串读取(r)出来并转换成对应的数据类型
    
    """
    
    
    

    json模块的实操

    • 1.涉及到用户数据的存储 可以单用户单文件

posted @   W日常  阅读(89)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示