【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
# 需求:命令行执行当前文件必须要提供用户名和密码 否则不准执行'''
解法1:
import 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.涉及到用户数据的存储 可以单用户单文件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)