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 执行指定的命令。

今天小结

调整状态,努力学习!

posted @ 2022-03-30 20:41  Eason辰  阅读(100)  评论(0)    收藏  举报