在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下为"
",Linux下为"
"
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']
正则表达式元字符
. 任意符号除换行符(
)
重复元素:
* [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 ?匹配任何空白字符;它相当于类 [
fv]。
S 匹配任何非空白字符;它相当于类 [^
fv]。
w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
?匹配一个特殊字符边界,比如空格 ,&,#等
#命名分组:
可以将分组命名并可以指定取得对象
ret8=re.search(r'(?p<A>w+)\aticles\(?p<id>d{4})',r'yuanaticles1234')
print(ret8.group('A'))
print(ret8.group('id'))
剩下补充:
贪婪匹配
print(re.findall('d+','af53432huh2342hhoijo2'))
非贪婪匹配
print(re.findall('d+?','af53432huh2342hhoijo2'))
如何忽略大小写,re.I(大写的i)