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')) # 获取错误命令执行之后的结果
复制代码

 

 

 

 

   

 

posted @   早安_1207  阅读(184)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
返回顶端
点击右上角即可分享
微信分享提示