模块篇:os、sys、json、subprocess模块
2022.3.30重要模块的使用
- os模块
- sys模块
- json模块
- subprocess模块
一、os模块
主要是跟操作系统打交道
1、创建目录(文件夹)
复制代码
- 1
- 2
- 3
- 4
import os
os.mkdir(r'aaa') # 在当前执行文件路径创建一个aaa文件夹,只能创建单极目录
os.makedirs(r'aaa') # makedirs也可创建单极目录
os.makedirs(r'aaa/bbb/ccc') # makedirs也可创建多级目录
2、删除目录(文件夹)
复制代码
- 1
- 2
- 3
import os
os.rmdir(r'aaa') # 能且只能删除空的单极目录
os.removedirs(r'aaa') # 可以删除单极目录,且如果删除目录之后最外层的目录也是空的则继续删除
3、查看某路径下所有文件名称(文件、文件夹)
复制代码
- 1
- 2
- 3
import os
print(os.listdir()) # 查看当前路径下所有文件名称
print(os.listdir(r'\users')) # 查看users路径下所有文件名
4、删除文件、重命名文件
复制代码
- 1
- 2
- 3
import os
os.remove(r'a.txt') # 删除a.txt文件
os.rename(r'a.txt',r'b.txt') # 重命名文件
5、获取当前路径、切换路径
复制代码
- 1
- 2
- 3
import os
print(os.getcwd()) # 获取当前所在路径
os.chdir(r'\users\aaa') # 切换路径至...
6、软件开发目录规范,启动脚本兼容性操作
复制代码
- 1
- 2
- 3
- 4
- 5
import os
os.path.dirname(__file__) # 动态获取当前执行文件所在的绝对路径
os.path.diename(os.path.dirname(__file__)) # 每嵌套一层就相当于往上切换一层
os.path.abspath(__file__) # 动态获取当前执行文件自身的绝对路径
7、判断文件是否存在
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
import os
print(os.path.exsits(r'ATM')) # True,表示该文件路径存在
print(os.path.isdir(r'ATM')) # False,判断该路径是否是文件夹
print(os.path.isfile(r'ATM')) # False,判断该路径是否是一个文件
8、拼接路径(极容易忽略)
复制代码
- 1
- 2
- 3
- 4
import os
base_dir = 'ATM'
exe_dir = '01 作业讲解.py'
res = os.path.join(base_dir,exe_dir) # 将两个路径拼接起来方便使用,且这种方法能自动兼容不同操作系统的分隔符\
9、获取文件大小
复制代码
- 1
- 2
import os
print(os.path.getsize(r'ATM')) # 128, 表示128bytes
二、sys模块
该模块主要是与python解释器打交道
1、列举当前执行文件所在的sys.path(掌握)
复制代码
- 1
- 2
import sys
print(sys.path) # 结果是个列表,类似于环境变量
2、获取解释器版本信息
复制代码
- 1
- 2
import sys
print(sys.version)
3、获取平台信息
复制代码
- 1
print(sys.paltform)
4、自定义命令行操作
cmd终端可以使用windows+r并输入cmd唤起,也可以在pycharm中使用快捷方式Terminal(alt+f12),进行模拟cmd并自动切换到当前执行文件所在的路径下
复制代码
- 1
print(sys.argv)
三、json模块
json是一个序列化模块,主要用于跨语言传输数据,就像人与计算机不能直接交流,而需要一个翻译解释器才可以进行沟通,json模块就是一个用来帮助不同语言进行交互的一个工具
引入:
数据基于网络传输肯定是二进制格式,在python中bytes类型的数据可以堪称二进制数据,而且python中只有字符串类型可以转成bytes类型(encode()),因此json模块的数据类型也基于此
json格式数据的具体特征:
(1)json格式数据,本质应该属于字符串类型
(2)双引号是json格式数据独有的标志符号
1、dumps()和loads()
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
import json
d = {'username':'jason','pwd':123}
res = json.dumps(d) # 将字典转成json格式
print(res,type(res)) # {"username": "jason", "pwd": 123} <class 'str'>, 数据都加上了双引号,这是json格式的标志,本质是字符串
res1 = json.loads(res) # 将json格式再转成字典
print(res1,type(res1)) # {'username': 'jason', 'pwd': 123} <class 'dict'>
因此,可以发现使用json格式进行相互转化,不会改变数据原有的数据类型,便于我们进行操作
总结:
json.dumps() 又叫序列化
将python数据类型转换成json格式字符串
json.loads() 又叫反序列化
将json格式字符串转换成对应的数据类型
2、dump()和load()
可以直接写入和读取文件
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
如果在将数据转化成json格式并写入文件,可以直接使用下面的形式:
d = {'username': 'jason', 'pwd': 123}
with open(r'a.txt','w',encoding='utf8') as f:
json.dump(d, f) # 表示直接将d转化成json格式并写入文件f
读取文件也是一样可以直接使用json模块读取json类型数据的文件
with open(r'a.txt','r',encoding='utf8') as f:
data = json.load(f)
注意:不是所有数据类型都支持序列化,支持的类型如下
python数据类型 | json对应 |
---|---|
dict | object |
list,tuple | array |
str | string |
int,float | number |
True | true |
False | false |
None | null |
四、subprocess模块
该模块可以实现远程操作其他计算机的功能,动态获取命令执行并返回结果(类似于Xshell软件的功能)
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
import subprocess
# ls在终端就是查看当前路径所有文件名的命令(mac电脑)
res = subprocess.Popen('ls',
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
print('stdout',res.stdout.read().decode('utf8')) # 获取正确命令后执行的结果
print('stderr',res,stderr.read().decode('utf8')) # 获取错误命令执行之后的结果
作业
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
编程题
# 项目功能
1.用户注册
2.用户登录
3.添加购物车
4.结算购物车
# 项目说明
用户数据采用json格式存储到文件目录db下 一个用户一个单独的文件
数据格式 {"name":"jason","pwd":123}
# ps:文件名可以直接用用户名便于校验
用户注册时给每个用户添加两个默认的键值对(账户余额 购物车)
{"balance":15000,"shop_car":{}}
添加购物车功能 商品列表可以自定义或者采用下列格式
good_list = [
['挂壁面',3],
['印度飞饼', 22],
['极品木瓜', 666],
['土耳其土豆', 999],
['伊拉克拌面', 1000],
['董卓戏张飞公仔', 2000],
['仿真玩偶', 10000]
]
用户可以反复添加商品,在购物车中记录数量
{'极品木瓜':[个数,单价]}
结算购物车
获取用户购物车中所有的商品计算总价并结算即可
# 思考:针对添加购物车和结算只有登录的用户才可以执行如何实现
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通