Python基础篇---os,sys,json和subprocess模块
本章内容
• os模块
• sys模块
• json模块
• subprocess模块
os模块
os模块主要是和计算机的操作系统交互的。
1.创建目录(文件夹)
1 2 3 4 5 | import os # os.mkdir(r'aaa') # 使用相对路径 在当前执行文件所在的路径下创建一个aaa文件夹 # os.mkdir(r'bbb\ccc') # 报错 mkdir只能创建单级目录 os.makedirs(r 'ccc' ) # makedirs可以创建单级目录 os.makedirs(r 'bbb\ccc\ddd' ) # makedirs支持创建多级目录 |
2.删除目录(文件夹)
1 2 3 4 5 | import os os.rmdir(r 'aaa' ) # 可以删除单级目录 os.rmdir(r 'bbb' ) # 报错 只能删空的单级目录 os.removedirs(r 'ccc' ) # 可以删除单级目录 os.removedirs(r 'E:\pythonProject\python3.30\bbb\ccc\ddd' ) # 删除目录之后如果外层的目录也是空的则继续删除 |
3.查看路径下的文件、文件夹
1 2 3 | import os print(os.listdir()) # 查看当前目录下的文件、文件夹 print(os.listdir(r 'E:\yx' )) # 查看指定目录下的文件、文件夹 |
4.删除文件、重命名文件
1 2 3 | import os os.remove(r 'text.txt' ) # 删除文件 os.rename(r 'text.txt' , r 'new.txt' ) # 将text.txt重命名为 new .txt |
5.获取当前路径、切换路径
1 2 3 4 | import os print(os.getcwd()) # E:\pythonProject\python3.30 获取当前路径 os.chdir(r 'E:\yx' ) # 切换路径 print(os.getcwd()) # E:\yx 获取当前路径 |
6.软件开发目录规范 启动脚本兼容性操作
1 2 3 4 | import os print(os.path.dirname(__file__)) # /pythonProject/python3.30 动态获取当前执行文件所在的绝对路径 print(os.path.dirname(os.path.dirname(__file__))) # E:/pythonProject 每嵌套一层就是往上切换一层 print(os.path.abspath(__file__)) # 动态获取当前执行文件自身的路径 E:\pythonProject\python3.30\a.py |
7.判断文件是否存在
1 2 3 4 5 6 7 | import os print(os.path.exists(r 'a.py' )) # True 判断所给的路径是否存在 print(os.path.exists(r 'new.txt' )) # True 判断所给的路径是否存在 print(os.path.isdir(r 'text' )) # True 判断路径是否是一个文件夹 print(os.path.isdir( 'new.txt' )) # False 判断路径是否是一个文件夹 print(os.path.isfile( 'a.py' )) # True 判断路径是否是一个文件 print(os.path.isfile(r 'text' )) # False 判断路径是否是一个文件 |
8.拼接路径(极容易忽略)
1 2 3 4 5 | import os base_dir = 'text' exe_dir= 'a.py' print(base_dir + '/' + exe_dir) # text/a.py 路径分隔符在不同的系统下是不一样的 使用加号的话兼容性极差 print(os.path. join (base_dir, exe_dir)) # text\a.py 能够自动识别当前操作系统的分隔符 |
9.获取文件大小(字节 bytes)
1 2 3 | import os print(os.path.getsize(r 'a.py' )) # 80bytes print(os.path.getsize(r 'new.txt' )) # 4bytes |
os模块的练习

# 展示某个文件下所有的文件名称 用户选择哪个就打开哪个 import os # 1.先获取目标文件路径(动态获取 也可以省事先写死) target_path = os.path.dirname(__file__) full_path = os.path.join(target_path, 'text') # 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模块
sys模块和os模块不同,sys模块主要是跟python解释器打交道。
1.列举当前执行文件所在的sys.path(掌握)
1 2 | import sys print(sys.path) # [ 'E:\\pythonProject\\python3.30' , 'E:\\pythonProject\\python3.30' ,...] 列表第一个为当前文件所在位置 |
2.获取解释器版本信息(了解)
1 2 | import sys print(sys.version) # 3.6.8 (tags/v3.6.8:3c6b436a57, Dec 24 2018, 00:16:47) [MSC v.1916 64 bit (AMD64)] |
3.获取平台信息(了解)
1 2 | import sys print(sys.platform) # win32 |
4.自定义命令行操作
1 2 3 | sys.argv[0] # 指的文件本身 sys.argv[1] # 输入的第一个命令 sys.argv[2] # 输入的第二个命令 |

import sys """ cmd终端可以使用windows+r并输入cmd唤起 也可以在pycharm直接使用快捷方式Terminal 模拟cmd并自动切换到当前执行文件所在的路径下 """ try: username = sys.argv[1] password = sys.argv[2] except Exception: print('请输入用户名和密码') else: if username == 'jason' and password == '123': print('可以正常执行该文件') else: print('用户名或密码错误 没有该文件的执行权限') # 使用方法 python解释器版本 + 文件路径 +命令 # 例如:python E:\pythonProject\python3.30\a.py jason 123
json模块
json是一个序列化模块,主要用于跨语言传输数据,json格式数据是不同变成语言之间数据交互的媒介。
json格式数据的具体特征:
1 2 | 数据基于网络传输肯定是二进制格式,在python中bytes类型的数据可以直接看成是二进制数据。 python中只有字符串可以通过encode转成bytes类型,所以json格式数据本质应该属于字符串类型 |
双引号是json格式数据独有的特征。
import json d = {'username':'jason','pwd':123} print(d, type(d)) # {'username': 'jason', 'pwd': 123} <class 'dict'> 单引号 res = json.dumps(d) # 将d转成json格式数据 print(res, type(res)) # {"username": "jason", "pwd": 123} <class 'str'> 双引号 print(str(d),type(str(d))) # {'username': 'jason', 'pwd': 123} <class 'str'> 单引号 c = {"username":"jason","pwd":123} print(c) # {'username': 'jason', 'pwd': 123} 单引号 不是json格式 res1 = '{"username":"jason","pwd":123}' # 字符串里写双引号 print(res1) # {"username":"jason","pwd":123} 算json格式
json格式数据的操作
import json '''假设将该字符串基于网络发给了另外一个python程序''' d = {'username':'jason','pwd':123} res = json.dumps(d) # 将python数据类型转换成json格式字符串 print(res, type(res)) # json格式字符串 encode_str = res.encode('utf8') # 将json格式的字符串编码成二进制数据 print(encode_str) # b'{"username": "jason", "pwd": 123}' # 二进制数据传给另一个程序 json_str = encode_str.decode('utf8') # 将收到的bytes解码成原本数据json格式的字符串 print(json_str,type(json_str)) # {"username": "jason", "pwd": 123} <class 'str'> res1 = json.loads(json_str) # 将json格式字符串转换成对应的数据类型 print(res1, type(res1)) # {'username': 'jason', 'pwd': 123} <class 'dict'> """ json.dumps() 序列化 将python数据类型转换成json格式字符串 json.loads() 反序列化 将json格式字符串转换成对应的数据类型 """
如果不能理解跨语言传输的作用 那么权且理解下面的操作即可
d = {'username': 'jason', 'pwd': 123} # 将上述字典写入文件 with open(r'a.txt','w',encoding='utf8') as f: # f.write(d) # f.write(str(d)) # 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)) """ 如果json模块需要配合文件一起使用的话 有固定的o方法 json.dump() 将其他数据类型直接写入文件(自动转json格式字符串) json.load() 将文件数据直接转成对应的数据类型(自动反序列化) """
ps:并表示所有数据类型都支持序列号,除了集合都可以。
Python | json |
dict | object |
list, tuple | array |
str | string |
int, float | number |
True | true |
False | false |
None | null |
subprocess模块
subprocess该模块可以实现远程操作其他计算机的功能,动态获取命令执行并返回结果。
import subprocess # ls在终端的意思就是查看当前路径下所有的文件名称
# Popen 是 subprocess的核心,子进程的创建和管理都靠它处理。
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')) # 获取错误命令执行之后的结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY