Week05 Day03(2022/3/30)
- os模块
- sys模块
- json模块
- subprocess模块
os模块
# 该模块主要用于和系统打交道
import os
- 创建目录
1.1 os.mkdir() # 只支持单级目录
os.mkdir(r'dirname') # 使用相对路径创建一个dirname文件夹
os.mkdir(r'dirname1/dirname2') # 报错
1.2 os.makedirs() # 支持单级和多级目录
os.makedirs(r'dirname') # makedirs可以创建单级目录
os.makedirs(r'dirname1/dirname2') # 也可以创建多级目录
- 删除目录
2.1 os.rmdir()
os.rmdir(r'dirname') # 可以删除单级目录
os.rmdir(r'dirname1/dirname2') # 只能删除空的单级目录 即dirname2目录下不能其他文件或目录
2.2 os.removedirs()
os.removedirs(r'dirname1') # 可以删除单级目录
os.removedirs(r'dirname1/dirname2') # 删除目录后如果外层的目录也为空则继续删除 删除dirname2后如果dirname1为空则继续删除dirname1
- 查看某个路径下所有的文件名称(文件、文件夹)
os.listdir() # 组成列表
print(os.listdir()) # 默认当前路径
print(os.listdir(r'E:\PycharmProjects\Runfast''))
- 删除文件、重命名文件
os.remove(r'a.txt') # 删除
os.rename(r'a.txt', r'aa.txt') # 重命名
- 获取当前路径、切换路径
print(os.getcwd()) # 获取当前路径
os.chdir(r'dirname1/dirname2') # 切换路径
print(os.getcwd())
- 软件开发目录规范 启动脚本兼容性操作
os.path.dirname(__file__) # 动态获取当前执行文件所在的绝对路径
os.path.dirname(os.path.dirname(__file__)) # 每嵌套一层就往上切换一层
print(os.path.abspath(__file__)) # 动态获取当前执行文件自身的路径
- 判断路径、文件是否存在
print(os.path.exists(r'aaa')) # True 判断所给的路径是否存在
print(os.path.exists(r'bbb.py'))
print(os.path.isdir(r'aaa')) # True 判断路径是否是一个文件夹
print(os.path.isfile(r'bbb.py')) # True 判断路径是否是一个文件
- 拼接路径
base_dir = 'aaa'
exe_dir = 'b.py'
'''拼接成py文件的路径'''
print(base_dir + '/' + exe_dir) # 路径分隔符在不同的系统下是不一样的 使用加号的话兼容性极差
res = os.path.join(base_dir, exe_dir) # 能够自动识别当前操作系统的分隔符
print(res)
- 获取文件大小(字节 bytes)
print(os.path.getsize(r'aaa')) # 100bytes
print(os.path.getsize(r'b.txt')) # 10bytes
小练习
# 选择指定文件并打开浏览(文本文件)
# 展示某个文件下所有的文件名称 用户选择哪个就打开哪个
import os
# 1.先获取目标文件路径(动态获取 也可以省事先写死)
target_path = os.path.dirname(__file__)
full_path = os.path.join(target_path, 'dirname')
# 2.列举该路径下所有的文件名称
file_name_list = os.listdir(full_path) # ['','','','']
while True:
# 3.循环展示每个文件名称
for i, j in enumerate(file_name_list, start=1):
print(i, j)
# 4.获取用户选择的编号
target_num = input('请输入您想要查看的文件编号>>>:').strip()
# 5.判断是否是纯数字
if target_num.isdigit():
# 6.如果是纯数字 转换成整型
target_num = int(target_num)
# 7.判断数字在不在数量范围内
if target_num in range(1, len(file_name_list) + 1):
# 8.获取文件名称
file_name = file_name_list[target_num - 1]
# 9.拼接完整路径
full_file_path = os.path.join(full_path, file_name)
# 10.文件操作打开文件
with open(full_file_path, 'r', encoding='utf8') as f:
print(f.read())
else:
print('没有该编号的文件')
else:
print('编号只能是数字')
sys模块
"""该模块主要是跟python解释器打交道"""
import sys
# 1.列举当前执行文件所在的sys.path
print(sys.path)
# 2.获取解释器版本信息
print(sys.version)
# 3.获取平台信息
print(sys.platform)
# 4.自定义命令行操作
print(sys.argv)
"""
cmd终端可以使用windows+r并输入cmd唤起
也可以在pycharm直接使用快捷方式Terminal
模拟cmd并自动切换到当前执行文件所在的路径下
"""
# if len(sys.argv) == 3: # 这里的判断也可以变成异常捕获的形式
# username = sys.argv[1]
# password = sys.argv[2]
# if username == 'cc' and password == '123':
# print('可以正常执行该文件')
# else:
# print('用户名或密码错误 没有该文件的执行权限')
# else:
# print('请输入用户名和密码 不能漏写或多写')
try:
username = sys.argv[1]
password = sys.argv[2]
except Exception:
print('请输入用户名和密码')
else:
if username == 'cc' and password == '123':
print('可以正常执行该文件')
else:
print('用户名或密码错误 没有该文件的执行权限')
json模块
'''json是一个序列化模块 主要用于跨语言传输数据'''
json.dumps() 序列化
将python数据类型转换成json格式字符串
json.loads() 反序列化
将json格式字符串转换成对应的数据类型
json格式数据的具体特征
数据基于网络传输肯定是二进制格式
在python中bytes类型的数据可以直接看成是二级制数据
python中哪些数据可以转成bytes类型(编码encode())
只有字符串可以!!!
# 由上述推论可知 json格式数据 本质应该属于字符串类型
'''双引号是json格式数据独有的标志符号!!!'''
具体操作
d = {'k1': 'v1', 'k2':'v2'}
res = json.dumps(d) # 将字典转成json格式字符串
print(res, type(res)) # {"k1": "v1", "k2": "v2"} <class 'str'>
d = json.loads(res) # 将json格式字符串转成对应数据类型(此处为字典)
print(d, type(d)) # {'k1': 'v1', 'k2': 'v2'} <class 'dict'>
在文件中操作
"""
如果json模块需要配合文件一起使用的话 有固定的方法
json.dump()
将其他数据类型直接写入文件(自动转json格式字符串)
json.load()
将文件数据直接转成对应的数据类型(自动反序列化)
"""
d = {'k1': 'v1', 'k2': 'v2'}
# 将上述字典写入文件
with open(r'a.txt', 'w', encoding='utf8') as f:
# f.write(d) 写入文件的数据类型必须是str 不能为dict
# f.write(str(d)) 可通过str()转换为str类型
# f.write(json.dumps(d)) 再序列化写入
json.dump(d, f)
# 将文件内容获取出来
with open(r'a.txt', 'r', encoding='utf8') as f:
# data = f.read()
# res = json.loads(data)
# print(res, type(res))
data = json.load(f)
print(data, type(data))
不是所有的数据类型都支持序列化
+-------------------+---------------+
| Python | JSON |
+===================+===============+
| dict | object |
+-------------------+---------------+
| list, tuple | array |
+-------------------+---------------+
| str | string |
+-------------------+---------------+
| int, float | number |
+-------------------+---------------+
| True | true |
+-------------------+---------------+
| False | false |
+-------------------+---------------+
| None | null |
+-------------------+---------------+
'''集合就不行'''
subprocess模块
import subprocess
# dir在终端的意思就是查看当前路径下所有的文件名称
res = subprocess.Popen('dir',
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
print('stdout', res.stdout.read().decode('gbk')) # 获取正确命令执行之后的结果
print('stderr', res.stderr.read().decode('gbk')) # 获取错误命令执行之后的结果
"""
该模块可以实现远程操作其他计算机的功能
动态获取命令执行并返回结果
eg:类似于Xshell软件的功能
"""
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统