常用模块讲解(二)
常用模块讲解(二)
os模块
-
创建文件目录(文件夹)
import os
os.mkdir(r'aaa') # 在当前执行文件的路径下创建一个aaa文件夹,使用的是相对路径
# os.mkdir(r'bbb/ccc') # 报错,mkdir只能创建单级目录
os.makedirs(r'ccc') # 在当前执行文件的路径下创建一个ccc文件夹,使用的是相对路径
os.makedirs(r'bbb/ccc/aaa') # 支持多级目录的创建
-
删除目录
os.rmdir(r'aaa') # 删除单级目录
# os.rmdir(r'bbb') # 报错,rmdir只能删除单级空目录
os.removedirs(r'ccc') # 删除单级目录
os.removedirs(r'F:\Py3\day1\bbb\ccc\aaa') # 从内至外,如果最内层是空的删除,次层是空的也删除,一直到目录不为空为止
-
查看某个路径下所有的文件名称
res = os.listdir() # 获取当前路径的所有文件
print(res)
res1 = os.listdir(r'C:') # 获取指定路径下的所有文件
print(res1)
-
删除文件、重命名文件
os.remove(r'2.txt') # 删除文件
os.rename(r'.2txt',r'2222.txt') # 重命名文件,第一个参数是旧文件名,第二个参数是新文件名
-
获取当前路径、切换路径
print(os.getcwd()) # F:\Py3\day1 获取当前路径
os.chdir(r'F:\pycharm') # 切换路径
print(os.getcwd()) # F:\pycharm
-
启动脚本的兼容性操作
print(os.path.dirname(__file__)) # F:/Py3/day1 动态获取当前执行文件所在的绝对路径
print(os.path.dirname(os.path.dirname(__file__))) # F:/Py3 每嵌套一次就往上切换一层路径
-
判断文件是否存在
print(os.path.exists(r'2222.txt')) # True 判断所给的路径是否存在,整个电脑的路径都可以判断
print(os.path.exists(r'F:\Py3\day1\sss\asd.py')) # True 判断所给的路径是否存在,整个电脑的路径都可以判断
print(os.path.isdir(r'2222.txt')) # False 判断所给的路径是否是一个文件夹
print(os.path.isdir(r'sss')) # True 判断所给的路径是否是一个文件夹
print(os.path.isfile(r'sss')) # False 判断所给文件是否是一个文件
print(os.path.isfile(r'F:\Py3\day1\sss\asd.py')) # True 判断所给文件是否是一个文件
-
拼接路径
a = 'sss'
b = '1.txt'
print(os.path.join(a,b)) # sss\1.txt 拼接路径,还能够自动识别不通同操作环境
-
获取文件大小
print(os.path.getsize(r'03.10.py')) # 5206 获取的大小是字节数(bytes)
print(os.path.getsize(r'2222.txt')) # 77 获取的大小是字节数(bytes)
sys模块
-
列举当前执行文件所在的sys.path
import sys
print(sys.path) # ['F:\\Py3\\day1', 'F:\\Py3\\day1', 'F:\\pycharm\\PyCharm 2020.3.5......',......]
-
获取当前解释器版本信息
print(sys.version) # 3.6.8 (tags/v3.6.8:3c6b436a57, Dec 24 2018, 00:16:47) [MSC v.1916 64 bit (AMD64)]
-
获取平台信息
print(sys.platform) # win32
-
自定义命令操作
cmd终端可以使用Windows+r然后输入cmd唤起,也可以在pycharm直接使用快捷方式Terminal,模拟cmd并自动切换到当前执行文件所在的路径。我们可以在py文件做一些操作,然后进去Terminal,直接输入当前执行文件的名字。

# 进入Terminal之后,我们可以输入当前执行文件的名字,占一个长度,然后后面还可以跟两个长度进行操作
if len(sys.argv) == 3:
username = sys.argv[1]
password = sys.argv[2]
if username == 'oscar' and password == '123':
print('可以正常执行该文件')
else:
print('用户名或密码错误 没有该文件的执行权限')
else:
print('请输入用户名和密码 不能漏写或多写')
# 也可以把上述代码转换成异常处理模式
try:
username = sys.argv[1]
password = sys.argv[2]
except Exception:
print('请输入用户名和密码 不能漏写或多写')
else:
if username == 'oscar' and password == '123':
print('可以正常执行该文件')
else:
print('用户名或密码错误 没有该文件的执行权限')
json模块
json是一个序列化模块,主要用于跨语言传输数据。它的底层原理:比如我们Python写的一些程序,获得一些数据,然后我们想要把数据传给一个用js主写的程序,但是呢Python支持的数据类型可能js就不支持,不支持就不会识别,所以就用到了我们的json模块,它可以把Python的数据类型转为json格式,然后由json格式转为js识别的数据类型,它在中间充当了一个翻译的角色。
json格式数据的具体特征
我们都知道基于网络传输数据都是二进制的,在Python中呢只有字符串可以转为二进制,为什么呢?因为在Python中bytes类型可以直接作为二进制,Python中只有字符串可以转为bytes类型,也就是编码(encode())。所以呢json格式的本质属于字符串类型,那它有什么具体的特征呢?来看:
import json
# 定义一个字符串
s = 'oscar'
print(s,type(s)) # oscar <class 'str'>
res = json.dumps(s)
print(res,type(res)) # "oscar" <class 'str'> 双引号就是json格式独有的特征
# 我们可以来看一下,对比一下
# 定义一个列表
l = ["oscar", "jason"]
print(l,type(l)) # ['oscar', 'jason'] <class 'list'> 这是一个一个列表,里面的元素是字符串,虽然是双引号,但实际上还是单引号
# 直接定义一个json格式
s1 = '"oscar"'
print(s1,type(s1)) # "oscar" <class 'str'>
序列化与反序列化
json.dumps():序列化,将Python数据类型转为json格式
json.loads():反序列化,将json格式转为对应的Python数据类型
# 假如我们有一个字典,基于网络发给另一个程序
d = {'name': 'oscar', 'age': 21}
res = json.dumps(d) # 转为json格式,也就是序列化
res_bytes = res.encode('utf8') # 进行编码
res_str = res_bytes.decode('utf8') # 进行解码,这时候是一个json格式
res_dict = json.loads(res_str) # 反序列化,转化为原来的格式
print(res_dict,type(res_dict)) # {'name': 'oscar', 'age': 21} <class 'dict'>
如果json模块需要配合文件一起使用的话,有固定的方法:
json.dump():将其他数据类型直接写入文件中(自动转json格式)
json.load():将文件数据自动转为对应的数据类型(自动反序列化)
# 假如我们有一个字典,写入文件中
d = {'name': 'oscar', 'age': 21}
with open(r'1.txt','w',encoding='utf8') as f:
json.dump(d,f) # 文件中的数据 {"name": "oscar", "age": 21}
with open(r'1.txt','r',encoding='utf8') as f1:
res = json.load(f1)
print(res,type(res)) # {'name': 'oscar', 'age': 21} <class 'dict'> 自动反序列化
注意:并不是所有的数据类型都支持序列化
Python类型 | json格式 |
---|---|
字典(dict) | object |
列表(list) | array |
元组(tuple) | array |
字符串(str) | string |
整型(int)、浮点型(float) | number |
布尔值(bool) | true、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')) # # 获取错误命令执行之后的结果
这里是IT小白陆禄绯,欢迎各位大佬的指点!!!
