Welcome!!!

F

伞兵一号,申请出战

常用内置模块(二)

常用内置模块(二)

os模块

'''该模块主要是跟操作系统交互'''
import os
# 1. 创建目录
# os.mkdir(r'aaa')  # 当前目录创建单个空文件夹
# os.makedirs(r'bbb\ccc\ddd')  # 当前目录下创建多级空文件夹
# os.makedirs(r'aaa\bbb')  # 在aaa文件夹中创建bbb文件夹

# 2. 删除目录
# os.rmdir(r'bbb')  # OSError: [WinError 145] 目录不是空的。: 'bbb' 只能删除空文件夹
# os.rmdir(r'aaa')  # 如果当前目录的指定文件夹是空的,直接删除
# os.removedirs(r'E:\python项目\课前预习草稿\bbb\ccc\ddd')  # 删除多级文件夹,从最里面删起,上一级如果是空的继续删,这里要用绝对路径,也可以删除单级目录

# 3.查看某个路径下的所有文件
# print(os.listdir())  # 查看当前目录下文件
# print(os.listdir(r'E:\python项目'))  # 查看指定目录下文件

# 4.删除文件、重命名文件
# os.remove(r'b.txt')
# os.rename(r'user.txt',r'userinfo.txt')

# 5. 获取当前路径、切换路径
# print(os.getcwd())
# os.chdir(r'E:\python项目')  # 切换到指定目录
# print(os.getcwd())
# os.chdir(r'..')  # 可以使用符号表示位置
# print(os.getcwd())

# 6.软件开发目录规范、启动脚本兼容性操作
# 原理:动态获取当前执行文件所在路径,拼接地址放进path中
# os.path.dirname(__file__)  # 获取当前文件所在目录
# os.path.dirname(os.path.dirname(__file__))  # 可以嵌套获取
# os.path.abspath(__file__)  # 获取当前文件位置,一直获取到文件本身

# 7. 判断文件是否存在
# print(os.path.exists(r'01.py'))  # 判断所给文件路径是否存在,存在返回Ture
# print(os.path.isdir(r'01.py'))  # 判断所给文件是否是一个文件夹,不是返回False
# print(os.path.isfile(r'01.py'))  # 判断所给文件是否是一个文件,是返回Ture

# 8.拼接路径
# 不同操作系统路径的分隔符是不一样的,一味用加号拼接会导致代码兼容性降低
# path_a = 'aaa'
# path_b = 'bbb'
# print(os.path.join(path_a,path_b))  # 根据当前系统自动匹配分隔符

# 9. 获取文件大小
# print(os.path.getsize(r'userinfo.txt'))  # 48bytes 结果的单位是字节

小练习

# 查看目录下所有文件,并根据用户选择打开
import os
# 获取所有文件并整合成字典返回
def get_file():
    res = os.listdir(r'txt')
    dict_file = {}
    num = 1
    for i in res:
        dict_file[str(num)] = i
        num += 1
    return dict_file
# 打开文件,读取内容
def open_file(file_path):
    with open(os.path.join('txt',file_path),'r',encoding='utf8') as f:
        file_str = f.read()
        return file_str

# 用户交互
dict_file = get_file()
for i in dict_file:
    print(i,':  ',dict_file[i])
num = input('请输入需要打开的文件序号>>>').strip()
print(open_file(dict_file[num]))

sys模块

'''该模块主要是跟python解释器交互'''
import sys
# 1. 列举当前执行文件所在的path(掌握)
# print(sys.path)

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

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

# 4. 自定义命令行操作
# print(sys.argv)  # 类似于cmd命令行,直接切换到当前文件路径

json模块

'''json是一个序列化模块 主要用于跨语言传输数据'''
"""
json格式数据的具体特征
	结论1中有一个小细节>>>:数据基于网络传输肯定是二进制格式
  在python中bytes类型的数据可以直接看成是二级制数据
  	python中哪些数据可以转成bytes类型(编码encode())
    	只有字符串可以!!!
   	由上述推论可知 json格式数据 本质应该属于字符串类型
"""
# 双引号是json格式数据独有的标志符号!!!
import json
# json和python字典类型相互转换
# import json
# d = {'name':'petter','age':18}
# print(d,type(d))  # {'name': 'petter', 'age': 18} <class 'dict'> 字典类型
# jd = json.dumps(d)
# print(jd,type(jd))  # {"name": "petter", "age": 18} <class 'str'> 字符串类型,这个就是json格式
# d1 = json.loads(jd)
# print(d1,type(d1))  # {'name': 'petter', 'age': 18} <class 'dict'> 又变回字典

# 基于网络传输文件思想
'''
	由于网络传输只能是二进制形式,所以必须把传输内容转换成二进制
	字典>序列化>编码成二进制>传输>解码>反序列化>字典
'''
# 模拟网络传输
# d = {'name':'petter','age':18}
# # 1.序列化
# res = json.dumps(d)
# # 2.编码
# res1 = res.encode('utf8')
# print(res1)
# # 3.传输文件,使用二进制读写文件模拟传输
# with open(r'txt\a.txt','wb')as f:
#     f.write(res1)
# # 4.取文件
# with open(r'txt\a.txt','rb')as f1:
#     res2 = f1.read()
# # 5.解码
# res3 = res2.decode('utf8')
# # 6.反序列化
# res4 = json.loads(res3)
# print(res4)
"""
如果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软件的功能
"""

posted @ 2022-03-30 18:43  程序猿伞兵一号  阅读(41)  评论(0)    收藏  举报