python之os、sys、json、subprocess模块
python之os、sys、json、subprocess模块
昨日内容回顾

re模块方法补充
findall系列方法分组优先机制
括号会优先显示括号内内容,手动取消优先显示需要(?:)
正则表达式起别名(只要用于search与match中)
(?P<别名>本名)
collections模块
1.具名元组
from collections import namedtuple
创建一个元组对象模板。
point = tuple('数字组',['数字1','数字2'])
创建诸多元租数据
p1 = point(1,2)
p2 = point(3,4)
print(p1,p2)
2.双端队列
队列:先进先出 默认是只有一端只能进另外一端只能出
双端队列:两端都可以进出
import queue
q = queue.Queue(最大可存储元素)
q.get() # 获取元素,知道队列无元素
q.pop() # 右边弹出元素
q.popleft() # 左边弹出元素
3.有序字典
from collections import OrderedDict
d2 = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(d2)
d2['x'] = 1
d2['y'] = 2
d2['z'] = 3
print(d2)
print(d2.keys())
字典生成式
from collections import defaultdict
values = [1, 2, 3, 4, 5 , 7, 8, 9]
my_dict = defaultdict(list) # 字典所有的值默认都是列表 {'':[],'':[]}
for value in values:
if value<6: # 设置条件
my_dict['k1'].append(value)
else:
my_dict['k2'].append(value)
4.计数器
res = 'abcabcabcaabbcc'
from collections import Counter
r = Counter(res)
print(r) # 返回一个字典,每种值与值的数量形成一个键对值
print(r.get('b')) # 取出v值,获取值出现的数量
time模块
三种表示时间的格式
1.时间戳
2.结构化时间
3.格式化时间
time.time() # 获取当前时间戳
time.localtime() # 结构化当前时间
time.strftime() # 格式化当前时间,格式由参数 format 决定
%Y%m%d %H%M%S %X
time.sleep() # 暂停程序运行
时间格式转换
时间戳 结构化时间 格式化时间
time.strptime('时间','时间格式')
不可从时间戳直接转换为格式化时间
datetime模块
常用获取时间
datetime.datetime.today() '''年月日时分秒'''
datetime.date.today() '''年月日'''
时间差值
datetime.timedelta()
日期对象 = 日期对象 +/- timedelta对象
timedelta对象 = 日期对象 +/- 日期对象
random模块
# 随机数模块
random.random() 0到1之间的小数
random.uniform() 指定区间的小数
random.randint() 指定区间的整数(掷骰子)
random.choice() 随机抽取一个(抽奖)
random.sample() 随机抽样(可以自定义个数)
random.shuffle() 随机打乱数据集合

今日内容概要
os模块
1.创建目录或文件夹
os.mkdir(r'文件夹') # 在当前执行文件所在的路径下创建一个文件夹
os.makedirs(r'目录') # makedirs可以创建单级目录
os.makedirs(r'1/2/3') # makedirs支持创建多级目录
2.删除目录(文件夹)
os.rmdir(r'aaa') # 可以删除单级目录
os.rmdir(r'bbb') # 只能删空的单级目录
os.removedirs(r'ccc') # 可以删除单级目录
os.removedirs(r'目标绝对地址') # 删除目录之后如果外层的目录也是空的则继续删除
3.查看某个路径下所有的文件名称(文件、文件夹)
print(os.listdir()) # 获取当前根目录下所有文件
print(os.listdir(r'/Users')) # 获取目标目录下的所有文件
4.删除、重命名文件
os.remove(phtn) # path -- 要移除的文件路径
os.rename(src, dst) # src -- 要修改的目录名 dst -- 修改后的目录名
5.获取当前路径、切换路径
os.getcwd() # 返回当前进程的工作目录
os.chdir(path) # 改变当前进程的工作目录 path -- 要切换到的新路径
6.软件开发目录规范,启动脚本兼容性操作
os.path.dirname(__file__) # 动态获取当前执行文件所在的绝对路径
os.path.dirname(os.path.dirname(__file__)) # 每嵌套一层就是往上切换一层
print(os.path.abspath(__file__)) # 动态获取当前执行文件自身的路径
7.判断文件是否存在
os.path.isabs(path) # 判断是否为绝对路径
os.path.isfile(path) # 判断路径是否为文件
os.path.isdir(path) # 判断路径是否为目录
os.path.islink(path) # 判断路径是否为链接
8.拼接路径
res = os.path.join(base_dir, exe_dir) # 能够自动识别当前操作系统的分隔符
9.获取文件大小(字节 bytes)
print(os.path.getsize(path))
sys模块
该模块主要是跟python解释器打交道
import sys
print(sys.path) # 列举当前执行文件所在的sys.path
print(sys.version) # 获取解释器版本信息
print(sys.platform) # 获取平台信息
print(sys.argv) # 自定义命令行操作,只能在终端里使用,本身是个列表。
try:
username = sys.argv[1]
password = sys.argv[2]
except Exception:
print('请输入用户名和密码')
else:
if username == 'jason' and password == '123':
print('可以正常执行该文件')
else:
print('用户名或密码错误 没有该文件的执行权限')
json模块
JavaScript Object Notation,JavaScript 对象表示法
json是一个序列化模块,是一种存储和交换文本信息的语法,
主要用于跨语言传输数据,类似中转站。
数据基于网络传输肯定是二进制格式,而python中只有字符串数据类型可以转换为二进制数据。
利用编码encode,所以,json格式数据,本质应该属于字符串类型。
双引号是json格式数据独有的标志符号,在控制台中会呈现双引号的都是json。
具体操作
例入,现在我要将一段python数据转换为json格式发送出去,然后再经由json模块将这段json格式的数据,从python中解释出来。
1.转换为json格式
import json
a = {'name': 'eason', 'code': 1874}
res = json.dumps(a)
print(res)
{"name": "eason", "code": 1874}
2.将json格式数据转换为二进制数据
encode_str = res.encode('utf8')
print(encode_str)
b'{"name": "eason", "code": 1874}'
3.将二进制数据重新接收后,再转换为字符串,json格式
json_str = encode_str.decode('utf8')
print(json_str)
{"name": "eason", "code": 1874}
4.将json格式数据返回原本数据格式
res1 = json.loads(json_str)
print(res1)
{'name': 'eason', 'code': 1874}
# 强调:不是所有的数据类型都支持序列化
""" json模块,pychrm内部代码自带表格
+-------------------+---------------+
| Python | JSON |
+===================+===============+
| dict | object |
+-------------------+---------------+
| list, tuple | array |
+-------------------+---------------+
| str | string |
+-------------------+---------------+
| int, float | number |
+-------------------+---------------+
| True | true |
+-------------------+---------------+
| False | false |
+-------------------+---------------+
| None | null |
+-------------------+---------------+
"""
subprocess模块
import subprocess
subprocess 模块首先使用的是它的 run 方法,更高级的用法可以直接使用 Popen 接口。
-
args:表示要执行的命令。必须是一个字符串,字符串参数列表。
-
stdin、stdout 和 stderr:子进程的标准输入、输出和错误。其值可以是 subprocess.PIPE、subprocess.DEVNULL、一个已经存在的文件描述符、已经打开的文件对象或者 None。subprocess.PIPE 表示为子进程创建新的管道。subprocess.DEVNULL 表示使用 os.devnull。默认使用的是 None,表示什么都不做。另外,stderr 可以合并到 stdout 里一起输出。
-
timeout:设置命令超时时间。如果命令执行时间超时,子进程将被杀死,并弹出 TimeoutExpired 异常。
-
check:如果该参数设置为 True,并且进程退出状态码不是 0,则弹 出 CalledProcessError 异常。
-
encoding: 如果指定了该参数,则 stdin、stdout 和 stderr 可以接收字符串数据,并以该编码方式编码。否则只接收 bytes 类型的数据。
-
shell:如果该参数为 True,将通过操作系统的 shell 执行指定的命令。
今天小结
调整状态,努力学习!

浙公网安备 33010602011771号