os模块,sys模块,json模块,subprocess模块

1. os模块

复制代码
"""该模块主要是跟操作系统打交道"""
import os
# 1.创建目录(文件夹)
# os.mkdir(r'python_cat')  # 使用相对路径 在当前时执行文件所在的路径下创建一个aaa文件夹
# >>>成功

# os.mkdir(r'python_cat/123')  # mkdir只能创建单级目录
# >>>报错

# os.makedirs(r'python_cat1')  # makedirs可以创建单级目录
# >>>成功

# os.makedirs(r'python_cat2/python_cat3/python_cat4')  # makedirs支持创建多级目录
# >>>成功


# 2.删除目录(文件夹)
# os.rmdir(r'python_cat')  # 可以删除单级目录
# >>>成功

# os.rmdir(r'python_cat1')  # 只能删空的单级目录
# >>>成功

# os.removedirs(r'python_cat1')  # 可以删除单级目录
# >>>成功

# os.removedirs(r'D:\pycharm project\pythonProject\1\python_cat2\python_cat3\python_cat4')  # 删除目录之后如果外层的目录也是空的则继续删除
# >>>成功


# 3.查看某个路径下所有的文件名称(文件、文件夹)
print(os.listdir())
# >>>['2.py', 'aaa']

print(os.listdir(r'D:\pycharm project'))
# >>>['.idea', '4', 'pythonProject']

# 4.删除文件、重命名文件
# os.remove(r'3.txt')
# >>>成功

# os.rename(r'3.txt', r'4.txt')
# >>>成功


# 5.获取当前路径、切换路径
print(os.getcwd())
# >>>D:\pycharm project\pythonProject\1
# os.chdir(r'D:\pycharm project\pythonProject')

# print(os.getcwd())
# >>>D:\pycharm project\pythonProject


# 6.软件开发目录规范 启动脚本兼容性操作
os.path.dirname(__file__)  # 动态获取当前执行文件所在的绝对路径
# >>>D:\pycharm project\pythonProject\1

res = os.path.dirname(os.path.dirname(__file__))  # 每嵌套一层就是往上切换一层
print(res)
# >>>D:/pycharm project/pythonProject

print(os.path.abspath(__file__))  # 动态获取当前执行文件自身的路径
# >>>D:\pycharm project\pythonProject\1\2.py


# 7.判断文件是否存在
print(os.path.exists(r'3.py')) #  判断所给的路径是否存在
# >>>True

print(os.path.isdir(r'python_cat'))  # 判断路径是否是一个文件夹
# >>>True

print(os.path.isdir(r'3.py'))  # 判断路径是否是一个文件夹
# >>>False

print(os.path.isdir(r'3.py'))  # 判断路径是否是一个文件
# >>>True

print(os.path.isfile(r'aaa'))  # 判断路径是否是一个文件
# >>>False


# 8.拼接路径(极容易忽略)
base_dir = '1'
exe_dir = '2.py'
'''拼接成py文件的路径'''
print(base_dir + '\\' + exe_dir)  # 路径分隔符在不同的系统下是不一样的  使用加号的话兼容性极差
# >>>1\2.py
res = os.path.join(base_dir, exe_dir)  # 能够自动识别当前操作系统的分隔符
print(res)
# >>>1\2.py


# 9.获取文件大小(字节  bytes)
print(os.path.getsize(r'aaa'))
# 0bytes

print(os.path.getsize(r'2.py')) # 2852bytes
复制代码

 

2. sys模块

复制代码
"""该模块主要是跟python解释器打交道"""
import sys
# 1.列举当前执行文件所在的sys.path(掌握)
print(sys.path)
# >>>['D:\\pycharm project\\pythonProject\\1', 'D:\\pycharm project\\pythonProject',
# 'F:\\Program Files\\PyCharm 2020.3.3\\plugins\\python\\helpers\\pycharm_display', 'F:\\Program Files\\Python3\\python38.zip',
# 'F:\\Program Files\\Python3\\DLLs', 'F:\\Program Files\\Python3\\lib', 'F:\\Program Files\\Python3',
# 'C:\\Users\\E\\AppData\\Roaming\\Python\\Python38\\site-packages', 'C:\\Users\\E\\AppData\\Roaming\\Python\\Python38\\site-packages\\win32',
# 'C:\\Users\\E\\AppData\\Roaming\\Python\\Python38\\site-packages\\win32\\lib', 'C:\\Users\\E\\AppData\\Roaming\\Python\\Python38\\site-packages\\Pythonwin',
# 'F:\\Program Files\\Python3\\lib\\site-packages', 'F:\\Program Files\\PyCharm 2020.3.3\\plugins\\python\\helpers\\pycharm_matplotlib_backend']

# 2.获取解释器版本信息(了解)
print(sys.version)
# >>>3.8.10 (tags/v3.8.10:3d8993a, May  3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)]

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

# 4.自定义命令行操作
print(sys.argv)
# >>>['D:/pycharm project/pythonProject/1/2.py']

"""
cmd终端可以使用windows+r并输入cmd唤起
也可以在pycharm直接使用快捷方式Terminal
    模拟cmd并自动切换到当前执行文件所在的路径下
"""
real_username = 'dragon'
real_password = 'python123'

if len(sys.argv) == 3: 
    username = sys.argv[1]
    password = sys.argv[2]
    if username == real_username and password == real_password:
        print('登录成功')
    else:
        print('用户名或密码错误 没有该文件的执行权限')
else:
    print('请输入用户名和密码 不能漏写或多写')

 # 这里的判断也可以变成异常捕获的形式
try:
    username = sys.argv[1]
    password = sys.argv[2]
except Exception:
    print('请输入用户名和密码')
else:
    if username == real_username and password == real_password:
        print('登录成功')
    else:
        print('用户名或密码错误 没有该文件的执行权限')
复制代码

 

 

3. json模块

复制代码
'''json是一个序列化模块 主要用于跨语言传输数据'''
# 1.参考群内截图得知json格式数据是不同变成语言之间数据交互的媒介
# 2.json格式数据的具体特征
#     结论1中有一个小细节>>>:数据基于网络传输肯定是二进制格式
#   在python中bytes类型的数据可以直接看成是二级制数据
#       python中哪些数据可以转成bytes类型(编码encode())
#         只有字符串可以!!!
# 由上述推论可知 json格式数据 本质应该属于字符串类型

# 双引号是json格式数据独有的标志符号!!!
import json

dict1 = {'username': 'dragon', 'pwd': 'python123'}
print(dict1, type(dict1))
# >>>{'username': 'dragon', 'pwd': 'python123'} <class 'dict'>

res = json.dumps(dict1)
print(res, type(res))
# >>>{"username": "dragon", "pwd": "python123"} <class 'str'>

print(str(dict1), type(str(dict1)))
# >>>{'username': 'dragon', 'pwd': 'python123'} <class 'str'>

'''双引号是json格式数据独有的标志符号'''
dict2 = {'username': 'dragon', 'pwd': 'python321'}
print(dict1)
# >>>{'username': 'dragon', 'pwd': 'python123'}

dict3 = '{"username":"dragon","pwd":python}'
print(dict3)
# >>>{"username":"dragon","pwd":python}  算json格式


dict4 = {'username': 'dragon', 'pwd': 'python123'}
res = json.dumps(dict4)  # 将字典序列化成json格式字符串
print(res, type(res))
# >>>{"username": "dragon", "pwd": "python123"} <class 'str'>

encode_str = res.encode('utf8')
print(encode_str)
# >>>b'{"username": "dragon", "pwd": "python123"}'

'''假设将该字符串基于网络发给了另外一个python程序'''
# 先将bytes类型转换成字符串
json_str = encode_str.decode('utf8')
print(json_str, type(json_str))
# >>>{"username": "dragon", "pwd": "python123"} <class 'str'>

res1 = json.loads(json_str)
print(res1, type(res1))
# >>>{"username": "dragon", "pwd": "python123"} <class 'dict'>
"""
json.dumps()        序列化
    将python数据类型转换成json格式字符串
json.loads()        反序列化
    将json格式字符串转换成对应的数据类型
"""

# 如果不能理解跨语言传输的作用 那么权且理解下面的操作即可
dict5 = {"username": "dragon", "pwd": "python123"}
# 将上述字典写入文件
with open(r'a.txt', 'w', encoding='utf8') as f:
    json.dump(dict5, f)

# 将文件内容获取出来
with open(r'a.txt', 'r', encoding='utf8') as f:
    data = json.load(f)
    print(data, type(data))
    # >>>{'username': 'jason', 'pwd': 123} <class 'dict'>
"""
如果json模块需要配合文件一起使用的话 有固定的方法
json.dump()
    将其他数据类型直接写入文件(自动转json格式字符串)
json.load()
    将文件数据直接转成对应的数据类型(自动反序列化)
"""
只有以下图片中的类型才能被序列化
复制代码

                                                                                                                                                          

 

4. subprocess模块

复制代码
import subprocess

# ls在终端的意思就是查看当前路径下所有的文件名称
res = subprocess.Popen('dir',
                       shell=True,
                       stdout=subprocess.PIPE,
                       stderr=subprocess.PIPE
                       )
print('stdout', res.stdout.read().decode('utf8', 'ignore'))  # 获取正确命令执行之后的结果
# >>>stdout   D еľ study
#  к 0E31-764F
# 
#  D:\pycharm project\pythonProject\1 Ŀ¼
# 
# 2022/03/30  17:44    <DIR>          .
# 2022/03/29  20:35    <DIR>          ..
# 2022/03/30  17:44               662 2.py
# 2022/03/30  17:06                 0 3.py
# 2022/03/30  17:38                33 a.txt
# 2022/03/30  17:15    <DIR>          aaa
#                3 ļ            695 ֽ
#                3 Ŀ¼ 413,859,958,784 ֽ
# 
# stderr 
# 
# Process finished with exit code 0

print('stderr', res.stderr.read().decode('utf8', 'ignore'))  # 获取错误命令执行之后的结果
# >>>stderr 

"""
该模块可以实现远程操作其他计算机的功能
    动态获取命令执行并返回结果
        eg:类似于Xshell软件的功能
"""
复制代码

 

posted @   thrombus  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示