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产生的名称空间中。

最新文章

  1. Elasticsearch聚合初探——metric篇
  2. C# Math类简介
  3. 100114D
  4. OC之property和自动释放池
  5. HDU 3746 Cyclic Nacklace 环形项链(KMP,循环节)
  6. mysqldump原理3
  7. LED驅動電路概述
  8. centos6.4 ceph安装部署之ceph object storage
  9. dtrace sample
  10. Pig性能优化
  11. shell死循环脚本示例
  12. jquery slideDown 控制div出现的方向
  13. tensorflow,model,object_detection,训练loss先下降后递增,到几百万,解决tensorflow,model,object,detection,loss,incease
  14. MySQL数据库(一)
  15. Zynq-Linux移植学习笔记之27UIO机制响应外部中断实现【转】
  16. java基础(1)IntelliJ IDEA入门和数组操作 解决idea启动速度慢--配置JVM
  17. nginx实现反向代理,以反向代理tomcat为例
  18. xml与json
  19. bootstrap学习笔记(网页开发小知识)
  20. 冲刺ing-7

热门文章

  1. 20140513 matlab画图
  2. 在命令行中运行Hadoop自带的WordCount程序
  3. 结合Poi实现可读取Excel的文件选择对话框
  4. 关于版本管理工具SVN
  5. 教你如何有效防止DDos攻击?
  6. sql ibatis
  7. pandas-pd.read_csv
  8. Python加密模块
  9. vim 详解
  10. NX二次开发-获得图纸抑制尺寸的表达式UF_DRF_ask_controlling_exp