CSIC_716_20191119【常用模块的用法 subprocess、re、logging、防止自动测试、包的理论】
subprocess模块
可以通过python代码给操作系统终端发送命令,并可以得到返回结果。
import subprocess
str = input('>>>请输入命令')
# 使用Popen方法,需要四个参数:输入的内容;shell;stdout和stderr的默认值都是subprocess.PIPE(子进程的管道值,最大64kb)
sub_obj = subprocess.Popen(str, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
#正确的话,输出stdout的内容,需要按照操作系统默认编码方式解码
success = sub_obj.stdout.read().decode('gbk')
if success:
print(success)
#错误的话,输出stderr的内容
error = sub_obj.stderr.read().decode('gbk')
if error:
print(error)
re模块
正则表达式:
正则表达式(Regular Expression)是一种独立的技术,很多语言都支持正则表达式。
正则表达式的重要的元字符:
>> \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符
>> ^ 匹配输入字符串开始的位置(以什么开始)
>> $ 匹配输入字符串结束的位置(以什么结束)
>> * 匹配前面的表达式0次或多次,通常和别的元字符搭配使用
>> + 匹配前面的表达式1次或多次,通常和别的元字符搭配使用
>> ? 匹配前面的表达式0次或1次,
>> {n} 匹配确定的n次,即 要匹配几次才终止,搭配使用。
>> {n,} 至少匹配n次,
>>{n,m} 最少匹配n次,最多匹配m次,其中n<=m
>> ? 非贪婪匹配,匹配到就不找了,不贪。
>> . 匹配除换行符以外的所有的字符
>>( ) 获取括号中的匹配内容
>>x|y 匹配x或者y
>>[xyz] 字符集合,匹配xyz中的任何一个字符
>>[^xyz] 匹配除xyz以外的所有字符
>>[a-z] 字符范围,匹配a-z之间的任意字符
>>[^a-z] 匹配范围以外的任意字符
>>\b 匹配字符的边界,er\b 可以匹配以er结尾的单词
>>\B 匹配非字符边界,er\B 可以匹配到单词中的er,但是匹配不到以er结尾的
>>\w (小写)匹配字母数字及下划线
>>\W (大写)匹配非字母数字及下划线
>>\d 匹配任意数字
>>\D 匹配任意非数字
>>\n 匹配一个换行符 换行
>>\t 匹配一个制表符 空格
在python中,要通过re模块才可以使用正则表达式,在提取过程中要注意转义字符
应用场景:爬虫、数据分析、验证输入的合法性(用户名、手机号等)
描述一波((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))
re模块的三种比较重要的方法:
findall( ),可以匹配所有字符,拿到返回的结果,返回的结果是一个列表。
findall( 正则表达式,要被验证的字符,匹配模式),匹配模式:re.S全局匹配
search( ),可以匹配一个字符,成功后拿到结果后就结束了,不往后匹配。生成一个对象,通过 .group()取值
match( ),从匹配字符的开头匹配,若不是想要的内容,则返回None。 生成一个对象,通过 .group()取值
logging模块
应用:
1、定义日志的存放地址logfile_path:先定位(创建)日志存放的目录,拼接日志自身的绝对路径,logfile_path就是日志的绝对路径。
2、拷贝日志的配置字典LOGGING_DIC
3、调用生成日志的方法
def get_log(user_type):
logging.config.dictConfig(LOGGING_DIC) # 加载配置字典
logger = logging.getLogger(user_type) # 传参数得到结果
return logger # 返回结果
logger = get_log('user_type')
logger.info('日志消息')
防止测试自动执行
有很多.py文件中封装的全部都是函数,所以没必要加上
if __name__ =='__main__':
如果a.py文件中写了非函数的正常执行语句,并且碰巧又被b.py文件作为模块导入,此时就要注意了,
一定要在a.py文件的正常执行语句前增加上述语句。否则在导入的时候会执行,造成意料之外的内容出现。
# func()
# __name__属于模块名称空间中的一个名字
# 当我们执行该模块时就会产生
在自身执行的时候,__name__ = __main__
在被其他模块调用时,__name__ = 包.模块名
包的理论
导入包的时候发生的事情:
当包被导入的时候,会以包中的__init__.py来产生一个名称空间。。
执行__init__.py文件时,会将__init__.py中的所有名字加载到名称空间中。-->init.py自身文件中的名字
接着,包下所有的模块的名字都会加载到__init__.py产生的名称空间中。-->init.py统辖的模块的名字
导入模块指向的名称空间其实就是__init__.py产生的名称空间中。
CSIC_716_20191119【常用模块的用法 subprocess、re、logging、防止自动测试、包的理论】的更多相关文章
- 常用模块之hashlib,subprocess,logging,re,collections
hashlib 什么是hashlib 什么叫hash:hash是一种算法(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,M ...
- 函数和常用模块【day06】:logging模块(八)
本节内容 1.简述 2.简单用法 3.复杂日志输出 4.handler详解 5.控制台和文件日志共同输出 一.简述 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误 ...
- ansible常用模块即用法
Linux 中,我们可以通过 ansible-doc -l 命令查看到当前 ansible 都支持哪些模块,通过 ansible-doc -s 模块名 又可以查看该模块有哪些参数可以使用. 下面 ...
- CSIC_716_20191118【常用模块的用法 Json、pickle、collections、openpyxl】
序列化模块 序列化:将python或其他语言中的数据类型,转变成字符串类型. python中的八大数据类型回顾:int float str list tuple dict set bool 反序列化: ...
- CSIC_716_20191116【常用模块的用法 time ,datetime, random, os, sys, hashlib】
import time import datetime import os import sys import random import hashlib time模块 时间戳(Timestamp) ...
- python之常用模块
python 常用模块 之 (subprocess模块.logging模块.re模块) python 常用模块 之 (序列化模块.XML模块.configparse模块.hashlib模块) pyth ...
- python3 常用模块详解
这里是python3的一些常用模块的用法详解,大家可以在这里找到它们. Python3 循环语句 python中模块sys与os的一些常用方法 Python3字符串 详解 Python3之时间模块详述 ...
- python常用模块补充hashlib configparser logging,subprocess模块
一.hashlib模板 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定 ...
- python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则
python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess ...
随机推荐
- php连接mysql遇到的问题: (HY000/1130) 和 [caching_sha2_password]
说明一下我的mysql是安装在虚拟机上的 所以遇到的第一个问题就是访问问题 解决: update user set host = '%' where user = 'root'; 重启mysql服务 ...
- Linux特殊位SUID、SGID、SBIT
Linux特殊位SUID.SGID.SBIT 前言 Linux中的文件权限一般有x.w.r,在某个情况下有需要用到s.t,即特殊位. 进程运行时能够访问哪些资源或文件,不取决于进程文件的属主属组,而是 ...
- echarts的图表根据父容器大小的改变而改变(弹窗easy-ui的window窗口)
1.echarts的图表只绘制一次,所以要想大小随着父容器变化就得调方法重新绘制.所以把绘制图表的方法提出来. <div class="echart"> <div ...
- Linux 进程间通信 消息队列
1.特点: 消息队列是IPC对象的一种 消息队列由消息队列ID来唯一标识 消息队列就是一个消息的列表.用户可以在消息队列中添加消息.读取消息等. 消息队列可以按照类型来发送/接收消息(消息的类型是正整 ...
- codeforces750E New Year and Old Subsequence 矩阵dp + 线段树
题目传送门 思路: 先看一个大牛的题解 题解里面对矩阵的构造已经写的很清楚了,其实就是因为在每个字符串都有固定的很多中状态,刚好可以用矩阵来表达,所以$(i,j)$这种状态可以通过两个相邻的矩阵的$m ...
- git基础1
git: 团队协作开发 版本管理 创建项目的文档 初始化 编写项目 把文件add到git仓库,其实是放到了git的代码暂存区 工作区有一个隐藏目录 .gi ...
- Java ----单个list 删除元素
转载:https://www.cnblogs.com/lostyears/p/8809336.html 方式一:使用Iterator的remove()方法 public class Test { pu ...
- 小程序生成海报:通过 json 配置方式轻松制作一张海报图
背景 由于我们无法将小程序直接分享到朋友圈,但分享到朋友圈的需求又很多,业界目前的做法是利用小程序的 Canvas 功能生成一张带有二维码的图片,然后引导用户下载图片到本地后再分享到朋友圈.而小程序 ...
- bzoj1042题解
[题意分析] 有q个询问,每次询问求一个只有四个物品的背包方案数. [解题思路] 先计算出所有面值硬币的无限背包方案数. 考虑容斥,每个限制表示选取大于di个面值ci的硬币,总方案数=0限制方案数-1 ...
- 思维题——牛客多校第六场D
这题的不能用二分做,因为不满足单调性的 可以用multiset做 #include<bits/stdc++.h> #define ll long long #define rep(i,a, ...