Week05 Day03(2022/3/30)

  • os模块
  • sys模块
  • json模块
  • subprocess模块

os模块

# 该模块主要用于和系统打交道
import os
  1. 创建目录
1.1 os.mkdir()	        # 只支持单级目录
os.mkdir(r'dirname')		# 使用相对路径创建一个dirname文件夹
os.mkdir(r'dirname1/dirname2')	# 报错

1.2 os.makedirs()	# 支持单级和多级目录
os.makedirs(r'dirname')		# makedirs可以创建单级目录
os.makedirs(r'dirname1/dirname2')	# 也可以创建多级目录
  1. 删除目录
2.1 os.rmdir()
os.rmdir(r'dirname')	                # 可以删除单级目录
os.rmdir(r'dirname1/dirname2')		# 只能删除空的单级目录	即dirname2目录下不能其他文件或目录

2.2 os.removedirs()
os.removedirs(r'dirname1')		# 可以删除单级目录
os.removedirs(r'dirname1/dirname2')	# 删除目录后如果外层的目录也为空则继续删除	删除dirname2后如果dirname1为空则继续删除dirname1
  1. 查看某个路径下所有的文件名称(文件、文件夹)
os.listdir()	# 组成列表
print(os.listdir())		# 默认当前路径
print(os.listdir(r'E:\PycharmProjects\Runfast''))
  1. 删除文件、重命名文件
os.remove(r'a.txt')		# 删除
os.rename(r'a.txt', r'aa.txt')	# 重命名
  1. 获取当前路径、切换路径
print(os.getcwd())	# 获取当前路径
os.chdir(r'dirname1/dirname2')	# 切换路径
print(os.getcwd())
  1. 软件开发目录规范 启动脚本兼容性操作
os.path.dirname(__file__)	# 动态获取当前执行文件所在的绝对路径	
os.path.dirname(os.path.dirname(__file__))	# 每嵌套一层就往上切换一层
print(os.path.abspath(__file__))  # 动态获取当前执行文件自身的路径
  1. 判断路径、文件是否存在
print(os.path.exists(r'aaa'))  # True  判断所给的路径是否存在
print(os.path.exists(r'bbb.py'))

print(os.path.isdir(r'aaa'))  # True  判断路径是否是一个文件夹     
print(os.path.isfile(r'bbb.py'))  # True  判断路径是否是一个文件
  1. 拼接路径
base_dir = 'aaa'
exe_dir = 'b.py'
'''拼接成py文件的路径'''
print(base_dir + '/' + exe_dir)  # 路径分隔符在不同的系统下是不一样的  使用加号的话兼容性极差
res = os.path.join(base_dir, exe_dir)  # 能够自动识别当前操作系统的分隔符
print(res)
  1. 获取文件大小(字节 bytes)
print(os.path.getsize(r'aaa'))  # 100bytes
print(os.path.getsize(r'b.txt'))  # 10bytes
小练习
# 选择指定文件并打开浏览(文本文件)
# 展示某个文件下所有的文件名称 用户选择哪个就打开哪个
import os

# 1.先获取目标文件路径(动态获取 也可以省事先写死)
target_path = os.path.dirname(__file__)
full_path = os.path.join(target_path, 'dirname')
# 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模块

"""该模块主要是跟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并自动切换到当前执行文件所在的路径下
"""

# if len(sys.argv) == 3:  # 这里的判断也可以变成异常捕获的形式
#     username = sys.argv[1]
#     password = sys.argv[2]
#     if username == 'cc' and password == '123':
#         print('可以正常执行该文件')
#     else:
#         print('用户名或密码错误 没有该文件的执行权限')
# else:
#     print('请输入用户名和密码 不能漏写或多写')


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

json模块

'''json是一个序列化模块 主要用于跨语言传输数据'''
json.dumps()        序列化
    将python数据类型转换成json格式字符串
json.loads()        反序列化
    将json格式字符串转换成对应的数据类型

json格式数据的具体特征
数据基于网络传输肯定是二进制格式
  在python中bytes类型的数据可以直接看成是二级制数据
  	python中哪些数据可以转成bytes类型(编码encode())
    	只有字符串可以!!!
  # 由上述推论可知 json格式数据 本质应该属于字符串类型

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

具体操作

d = {'k1': 'v1', 'k2':'v2'}

res = json.dumps(d)         # 将字典转成json格式字符串
print(res, type(res))       # {"k1": "v1", "k2": "v2"} <class 'str'>

d = json.loads(res)      # 将json格式字符串转成对应数据类型(此处为字典)
print(d, type(d))     # {'k1': 'v1', 'k2': 'v2'} <class 'dict'>

在文件中操作

"""
如果json模块需要配合文件一起使用的话 有固定的方法
json.dump()
    将其他数据类型直接写入文件(自动转json格式字符串)
json.load()
    将文件数据直接转成对应的数据类型(自动反序列化)
"""

d = {'k1': 'v1', 'k2': 'v2'}
# 将上述字典写入文件
with open(r'a.txt', 'w', encoding='utf8') as f:
    # f.write(d)	写入文件的数据类型必须是str 不能为dict
    # f.write(str(d))	可通过str()转换为str类型
    # 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))

不是所有的数据类型都支持序列化

    +-------------------+---------------+
    | Python            | JSON          |
    +===================+===============+
    | dict              | object        |
    +-------------------+---------------+
    | list, tuple       | array         |
    +-------------------+---------------+
    | str               | string        |
    +-------------------+---------------+
    | int, float        | number        |
    +-------------------+---------------+
    | True              | true          |
    +-------------------+---------------+
    | False             | false         |
    +-------------------+---------------+
    | None              | null          |
    +-------------------+---------------+
    '''集合就不行'''

subprocess模块

import subprocess

# dir在终端的意思就是查看当前路径下所有的文件名称
res = subprocess.Popen('dir',
                       shell=True,
                       stdout=subprocess.PIPE,
                       stderr=subprocess.PIPE)

print('stdout', res.stdout.read().decode('gbk'))   # 获取正确命令执行之后的结果
print('stderr', res.stderr.read().decode('gbk'))   # 获取错误命令执行之后的结果

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

posted @   扶我上码  阅读(46)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示