python模块的概念

在python中模块其实就是文件,当你把一段代码功能保存为一个文件的时候,放到特定的位置在需要的时候就可以import导入这个模块。

 

关于部分内置模块:

 

time模块:

time模块是python解释器内置的一个模块,可以用来查看时间以及转换各种时间格式,其用途比较多。

time模块有三种时间表示形式

1:时间戳

time.time()
1970年开始走过的秒数,这是计算机用来记录时间的

2:格式化字符串时间
time.strftime('%Y-%m-%d %x')

3:结构化时间
time.localtime()
tm_year,tm_mon,tm_mday,

其转换顺序是:时间戳>>结构化时间>>格式化字符串时间

 

random模块:

有以下几个常用的函数

random.random()#大于0且小于1的数字
random.uniform(a, b),用于生成一个指定范围内的随机浮点数,两个参数其中一个是上限,一个是下限。如果a > b,则生成的随机数n: a <= n <= b。如果 a <b, 则 b <= n <= a。
random.randrange([start], stop[, step]),从指定范围内,按指定基数递增的集合中 获取一个随机数
random.randint(0,9)#生成指定范围的内的整数。
random.choice([1,2,3,4,4,5])随机选择列表中的元素
random.sample([1,2,3,4,5,6],2)#随机列表里的两个数字
random.shuffle([1,2,3,4,5,6,8])#洗牌里面的数字

一般可以用于一些随机性的时间,比如我们可以用来写个随机验证码生成器:

import random
def add():
    s = ''
    for i in range(5):
        x=random.randint(0,9)
        y=chr(random.randint(65,90))
        a=random.choice([x,y])
        s+=str(a)
    return s
print(add())

 

hashlib模块:

哈希算法模块,这个模块一般用于md5验证


#md5算法语法

m=hashlib.md5()#md5('xxxx'.encode('utf8'))#括号里可以加入随机字符参数,进行进一步加密
m.update('hello'.encode('utf8'))
print(m.hexdigest())

 

os模块

这个模块一般用于调用系统的功能,比如最常用的就是文件夹操作

语法有以下这些:

os模块
os模块是与操作系统交互的命令
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("C:\\dirname")  改变当前脚本工作目录;相当于shell下cd,切换文件路径
os.curdir  返回当前目录: ('.')
os.pardir  获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2')    可生成多层递归目录
os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()  删除一个文件
os.rename("oldname","newname")  重命名文件/目录
os.stat('path/filename')  获取文件/目录信息
os.sep    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep    输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command")  运行shell命令,直接显示
os.environ  获取系统环境变量
os.path.abspath(path)  返回path文件名的规范化的绝对路径
os.path.split(path)  将path分割成目录和文件名二元组返回
os.path.dirname(path)  返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path)  返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path)  如果path是绝对路径,返回True
os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1, path2)  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小
'''

sys模块:


sys.version#当前解释器版本
sys.platform#当前操作系统
sys.argv#用于shell命令解释器执行py文件时候后面空格分开跟上的参数的接收成一个列表,比如linx中执行文件的时候后面加入的参数,在内部可以用$1和$2来接收(第一个参数是文件名本身)
sys.path#可以查看当前导入模块的时候找过的路径

 

logging模块:

关于日志模块,日志模块在程序中是比较常用的模块,如果要记录一些程序运行中的各种事件和异常的话,自己手动创建日志文本格式是一件非常麻烦的事情,这个时候就要用上日志模块了。

日志模块有两种配置方式,congfig,logger

#1congfig函数:

语法细节

import logging  
logging.basicConfig(level=logging.DEBUG, #日志等级默认是warning
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',  #日志格式
                    datefmt='%a, %d %b %Y %H:%M:%S',  #日期格式
                    filename='/tmp/test.log',  #文件名路径
                    filemode='w')  #模式w覆盖,a追加

来看看日志格式都有哪些

%(name)s Logger的名字
%(levelno)s 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(filename)s 调用日志输出函数的模块的文件名
%(module)s 调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(thread)d 线程ID。可能没有
%(threadName)s 线程名。可能没有
%(process)d 进程ID。可能没有
%(message)s用户输出的消息

#2 logger函数

语法细节

import logging

logger=logging.getlogger()  创建一个logging对象

fh=logging.FileHandler('logger2')#文件流对象,默认是追加写
sh=logging.StreamHandler()#输出屏幕流对象

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')#格式对象

fh.setFormatter(formatter)文件流对象与格式链接
sh.setFormatter(formatter)屏幕流对象与格式链接



logger.addHandler(fh)然后和logger对象连接
logger.addHandler(sh)

logger.setlevel(logging.DEBUG)

logger.debug('debug message')  
logger.info('info message')  
logger.warning('warning message')  
logger.error('error message')  
logger.critical('critical message')  

 

序列化模块

当一个python数据类型需要存储在文本中或者需要传送的时候,需要将数据转化为一个json类型,方保存和传送与随时可以提取拿来用

json模块:

json模块:
语法:dumps
import json

d=['1','6','77','88']
data=json.dumps(d)#将数据类型转换成json字符串,json语言
data2=json.loads(data)#将数据反序列化


语法二:dump写入文件的简单写法,必须要有文件对象
with open('001.txt','w')as f
    json.dump(d,f)

 

因为使用简单,不做过多讲述

pickle模块:

  也是一种数据类型和json十一样的pickle数据类型只能由pytho自己读取,不能和别的语言相互沟通,不过pickle可以保存所有python数据类型,甚至是类,而json无法做到,其语法细节和json是一摸一样的。

 

 

正则模块re:

因为正则表达式过于复杂,这里只列出了一些常用的语法

re.findall('正则表达式','操作对象')#可以将匹配的数据全部以列表的形式列出

finditer:#与findall不同的是匹配的内容返回一个迭代器
s=re.finiter('\d+','ad324das32')

s.__next__().group()取值

ret=re.search('\d+','djasasas34asd3')#只匹配第一个结果其余忽略
print(ret.group)
>>34

#match只在字符串开始的位置匹配

ret=re.match('\d+','432jkjjjjhjh3')
print(ret.group())
>>432

split#分割表达式,后面可以加上可选参数,来限定分割次数

s2=re.split('\d+','ddsdsd3232dsdsd2323dsdsd')
>>['3232','2323']

re.sub('\d+','A','hello  234jkhh23')#替换表达式,将所有的数字替换为A

re.subn('\d+','A','hello  234jkhh23')#可以多返回一个替换次数

ret6=re.compole('\d+')#先编译好一个匹配规则对象
c=ret6.findall(‘hell22dsds2332’)
print(c)
>>['22','2332']

 

正则表达式元字符
 
 .     任意符号除换行符(\n)
重复元素:
*     [0,无穷个]
+    1到无穷个
?    0到1次
{num}    在括号内指定次数   
{start,stop}范围次数

 

 

[ ]:字符集:
在字符集内几乎所有特殊字符都变普通字符
除了[1-9]中的代表1到9范围内的任意一个数字还有(- ^ \)
当字符集内开头有个尖角号的时候[^0-9]就是取反的意思,这个意思是取不是数字的元素
re.findall('a[bd]c','abcsjsjsjsjsadc')
>>['abc','adc']

():分组:
(?:)括号内加入?:可以取消先显示括号内的内容的优先级

print(re.findall('(ad)+','addd'))
>>['ad']

print(re.findall('(?:ad)+yuan','adadyuangfsdsd'))
>>['adadyuan']

print(re.findall('www\.(?:oldboy|baidu)\.com','www.oldboy.com'))#逻辑或符号“|”可以匹配左边的或者右边的

开始匹配 和结尾匹配
  ^                 $

转义字符
\d ?匹配任何十进制数;它相当于类 [0-9]。
\D 匹配任何非数字字符;它相当于类 [^0-9]。
\s ?匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。
\S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。
\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
\b ?匹配一个特殊字符边界,比如空格 ,&,#等

 

#命名分组:

可以将分组命名并可以指定取得对象

ret8=re.search(r'(?p<A>\w+)\\aticles\\(?p<id>\d{4})',r'yuan\aticles\1234')
print(ret8.group('A'))
print(ret8.group('id'))

 

剩下补充:

贪婪匹配
print(re.findall('\d+','af53432huh2342hhoijo2'))

非贪婪匹配
print(re.findall('\d+?','af53432huh2342hhoijo2'))

如何忽略大小写,re.I(大写的i)

 

posted @ 2017-04-26 15:32  CrisChou  阅读(382)  评论(1编辑  收藏  举报