os、sys、json、subprocess模块


今日内容概要

1.os模块

2.sys模块

3.json模块

4.subprocess模块

今日内容详细

os模块

"""该模块主要是跟操作系统打交道"""
import os
?
1.创建目录(文件夹)
?
os.mkdir(r'aaa') # 使用相对路径 在当前执行文件所在的路径下创建一个aaa文件夹
os.mkdir(r'bbb/ccc') # 报错 mkdir 只能创建单极目录
?
os.makedirs(r'aaa') # 与mkdir一样
os.makedirs(r'bbb/ccc') # 可以创建多级目录
?
2.删除目录(文件夹)
?
os.rmdir(r'aaa') # 可以删除单级目录 只能删空的单极目录
?
os.removedirs(r'ccc') # 可以删除单级目录
os.removedirs(r'路径') # 删除目录之后如果外层的目录也是空的则继续删除
?
3.查看某个路径下所有的文件名称(文件,文件夹)
?
print(os.listdir())
print(os.listfir(r'/Users'))
?
4.删除文件,重命名文件
?
os.remove(r'a.txt')
os.rename(r'a.txt',r'aaa.txt')
?
5.获取当前路径,切换路径
?
print(os.getcwd())
os.chdir(r'/Users/jiboyuan')
print(os.getcwd())
?
6.软件开发目录规范 启动脚本兼容性操作
?
os.path.dirname(__file__) # 动态获取当前执行文件所在的绝对路径 D:\day21
os.path.dirname(os.path.dirname(__file__)) # 每嵌套一层就是往上切换一层 D:\
print(os.path.abspath(__file__)) # 动态获取当前执行文件自身的路径 # D:\day21\a.py
?
7.判断文件是否存在
?
print(os.path.exists(r'ATM')) # 打印结果为 True 判断所给的路径是否存在
print(os.path.exists(r'01 作业讲解.py')) # True 判断路径是否是一个文件夹
print(os.path.isdir(r'ATM')) # True 判断路径是否是一个文件夹
print(os.path.isdir(r'01 作业讲解.py')) # False 判断路径是否是一个文件夹
print(os.path.isfile(r'ATM'))  # False 判断路径是否是一个文件
print(os.path.isfile(r'01 作业讲解.py'))  # True 判断路径是否是一个文件
?
8.拼接路径(极容易忽略)
?
base_dir = 'ATM'
exe_dir = '01 作业讲解.py'
"""拼接成py文件的路径"""
print(base_dir + '/' + exe_dir) # 路径分隔符在不同的系统下是不一样的 使用加号的话 兼容性极差 不推荐使用!!!
res = os.path.join(base_dir,exe_dir) #能够自动识别当前操作系统的分隔符
print(res)
?
9.获取文件大小(字节 bytes)
?
print(os.path.getsize(r'ATM')) # 128bytes
print(os.path.getsize(r'a.txt')) # 14bytes

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并自动切换到当前执行文件所在的路径下
"""

json模块

"""json模块是一个序列化模块 主要用于跨语言传输数据"""

1.json格式数据是不同编程语言之间数据交互的媒介
?

2.json格式数据的具体特征
结论1中有一个小细节: 数据基于网络传输肯定是二进制格式
在python中bytes类型的数据可以直接看成是二进制数据
python中哪些数据可以转成bytes类型 (通过编码encode())
    """只有字符串可以"""
   
# 由上述推论可知 json格式数据 本质应该属于字符串类型
?
# 双引号是json格式数据独有的标志符号!!!
?
import json
?
d = {'username':'jason','pwd':123}
print(d, type(d))  # {'username': 'jason', 'pwd': 123}
res = json.dumps(d)
print(res, type(res))  # {"username": "jason", "pwd": 123}
print(str(d),type(str(d)))  # {'username': 'jason', 'pwd': 123}
?
d = {"username":"jason","pwd":123}
print(d)  # {'username': 'jason', 'pwd': 123} 不是json格式
res1 = '{"username":"jason","pwd":123}'
print(res1)  # {"username":"jason","pwd":123} 算json格式
?

json模块具体操作

1.   json.dumps()   序列化
 将python数据类型转换成json格式字符串
?
d = {'username':'jason','pwd':123}
res = json.dumps(d)
print(res, type(res))  # json格式字符串
?
'''假设将该字符串基于网络发给了另外一个python程序'''
# 先将bytes类型转换成字符串
?
2.   json.loads()   反序列化
 将json格式字符串转换成对应的数据类型
?
   encode_str = res.encode('utf8')
json_str = encode_str.decode('utf8')
print(json_str,type(json_str))
res1 = json.loads(json_str)
print(res1, type(res1))  # {'username': 'jason', 'pwd': 123}
?
# 如果不能理解跨语言传输的作用 那么权且理解下面的操作即可
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模块需要配合文件一起使用的话 有固定的方法
json.dump()
  将其他数据类型直接写入文件(自动转json格式字符串)
json.load()
  将文件数据直接转成对应的数据类型(自动反序列化)
"""
?
# 强调:不是所有的数据类型都支持序列化
"""
  +-------------------+---------------+
  | Python           | JSON         |
  +===================+===============+
  | dict             | object       |
  +-------------------+--------------+
  | list, tuple       | array       |
  +-------------------+--------------+
  | str               | string       |
  +-------------------+--------------+
  | int, float       | number       |
  +-------------------+--------------+
  | True             | true         |
  +-------------------+--------------+
  | False             | false       |
  +-------------------+--------------+
  | None             | null         |
  +-------------------+--------------+
"""

pickle模块

# 基本不用
因为它不支持跨语言传输 只能识别python代码
'''直接忽略 不用掌握'''

subprocess模块

import subprocess
?
# ls在终端的意思就是查看当前路径下所有的文件名称
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'))  # 获取错误命令执行之后的结果
?
"""
该模块可以实现远程操作其他计算机的功能
  动态获取命令执行并返回结果
      eg:类似于Xshell软件的功能
"""