常用模块(二)


内容概要

  • os模块

  • sys模块

  • json模块

  • subprocess模块


os模块

os模块主要是跟操作系统打交道

import os
# 1.创建目录及文件夹
os.mkdir(r'name')  # 运行后 在当前执行文件所在得路径创建name文件夹当文件存在时报错
"mkdir 只能创建单级目录"

os.makedirs(r'user\info')  # makedirs支持创建多级目录 也可支持创建单级级目录


# 2.删除目录(文件夹)
# 可以删除指定路径的空的单级目录 删除的是name目录下的info目录
os.rmdir(r'name\info')  

# 可以删除空的单级目录 但当删除目录之后如果外层的目录也是空的则继续删除
os.removedirs(r'D:\PyWork\Py基础\模块\name\info') 

# 3.查看某个路径下所有的文件名称(文件、文件夹)
print(os.listdir())  # 查看当前执行文件所在目录下的所用目录
print(os.listdir(r'D:\\'))  # 这是在windows系统下的用\ macos用的是/

# 4.删除文件、重命名文件
os.remove(r'b.txt')  # 不管文件有无内容都会被删除
os.rename(r'bbb.txt', r'b.txt')  # 文件重命名

# 5.获取当前路径、切换路径
print(os.getcwd())  # 获取当前执行文件所在目录的路径
os.chdir(r'D:\SoftWare')  # 切换指定路径
print(os.getcwd())  # D:\SoftWare

# 6.软件开发目录规范 启动脚本兼容性操作
print(os.path.dirname(__file__))  # 动态获取当前执行文件所在的绝对路径       D:/PyWork/Py基础/模块
print(os.path.dirname(os.path.dirname(__file__))) # 每嵌套一层就是往上切换一层  D:/PyWork/Py基础
print(os.path.abspath(__file__))  # 动态获取当前执行文件自身的路径     D:\PyWork\Py基础\模块\os模块.py

# 7.判断文件是否存在
print(os.path.exists(r'bin'))  # True  判断所给的路径是否存在
print(os.path.exists(r'log\log.log'))  # True  判断所给的路径是否存在
print(os.path.isdir(r'user\info'))  # True  判断路径是否是一个文件夹
print(os.path.isdir(r'abc.py'))  # False  判断路径是否是一个文件夹
print(os.path.isfile(r'a.txt'))  # True  判断路径是否是一个文件
print(os.path.isfile(r'user\info'))  # False  判断路径是否是一个文件

# 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'D:\PyWork\Py基础\模块'))  # 4096bytes
print(os.path.getsize(r'b.txt'))  # 10bytes

sys模块

sys模块主要是跟python解释器打交道

import sys
# 1.列举当前执行文件所在的sys.path(掌握)
print(sys.path)

# 2.获取解释器版本信息(了解)
print(sys.version)

# 3.获取平台信息(了解)
# print(sys.platform)  # win32

# 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 == 'jason' and password == '123':
        print('可以正常执行该文件')
    else:
        print('用户名或密码错误 没有该文件的执行权限')
else:
    print('请输入用户名和密码 不能漏写或多写')
# cmd下运行   
# D:\PyWork\Py基础\模块>python36 os模块.py
# os模块.py
# 请输入用户名和密码 不能漏写或多写

# 加入异常
try:
    username = sys.argv[1]
    password = sys.argv[2]
except Exception:
    print('请输入用户名和密码')
else:
    if username == 'jason' and password == '123':
        print('可以正常执行该文件')
    else:
        print('用户名或密码错误 没有该文件的执行权限')

# D:\PyWork\Py基础\模块>python36 os模块.py
# 请输入用户名和密码

json模块

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

 1. json格式数据是不同变成语言之间数据交互的媒介    
 2. json格式数据的具体特征
	数据基于网络传输都是是二进制格式
  	在python中bytes类型的数据可以直接看成是二级制数据
  	python中只有'字符串数据'可以转成'bytes类型'(编码encode())
  # 由上述推论可知 json格式数据 本质应该属于字符串类型
   
import json
'''双引号是json格式数据独有的标志符号'''
d = {'username':'Tom','pwd':666}
print(d, type(d))  # {'username': 'Tom', 'pwd': 666} 
# json格式
res = json.dumps(d)
print(res, type(res))  # json格式>>> {"username": "Tom", "pwd": 666} 
# 字符串类型
print(str(d),type(str(d)))  # {'username': 'Tom', 'pwd': 666} 

json具体操作

import json

d = {'username':'Tom','pwd':666}
print(d, type(d))  # 此时数据类型为字典 {'username': 'Tom', 'pwd': 666} 
res = json.dumps(d)  # 转成json格式
print(res, type(res))  # json格式字符串 {"username": "Tom", "pwd": 666} 
encode_str = res.encode('utf8')  # 进行编码
'''假设将该字符串基于网络发给了另外一个python程序'''

# 先将bytes类型转换成字符串
json_str = encode_str.decode('utf8')  # 解码
print(json_str,type(json_str))  # json格式{"username": "Tom", "pwd": 666} 
res1 = json.loads(json_str)
print(res1, type(res1))  # 原来的字典 {'username': 'Tom', 'pwd': 666} 

"""
json.dumps()        序列化
    将python数据类型转换成json格式字符串
json.loads()        反序列化
    将json格式字符串转换成对应的数据类型
"""

# 在文件上操作时
d = {'username':'Tom','pwd':666}
# 将上述字典写入文件
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

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软件的功能
"""