常用内置模块(二)
![]()
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软件的功能
"""
![]()