本节大纲:
- 模块介绍
- time &datetime模块
- random
- os
- sys
- shutil
- json & picle
- shelve
- xml处理
- yaml处理
- configparser
- hashlib
- subprocess
- logging模块
- re正则表达式
模块,实现了某个功能的代码集合。
类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。
如:os 是系统相关的模块;file是文件操作相关的模块
模块分为三种:
- 自定义模块
- 内置标准模块(又称标准库)
- 开源模块
自定义模块 和开源模块的使用参考 http://www.cnblogs.com/wupeiqi/articles/4963027.html
time & datetime模块
import time
import datetime print(time.process_time())#返回处理器时间
print(time.altzone)
print(time.asctime())#返回时间格式Sun Nov 13 12:08:23 2016
print(time.localtime())#返回本地时间的struct time对象格式
print(time.asctime(time.localtime()))
#返回时间格式"Fri Aug 19 11:14:16 2016", # 日期字符串 转成 时间戳
print('**************************************')
string_2_struct = time.strptime("2016/05/22","%Y/%m/%d") #将 日期字符串 转成 struct时间对象格式
print(string_2_struct)
# #
struct_2_stamp = time.mktime(string_2_struct) #将struct时间对象转成时间戳
print(struct_2_stamp)
print('**************************************')
#将时间戳转为字符串格式
print(time.gmtime(time.time()-86640)) #将utc时间戳转换成struct_time格式
print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) #将utc struct_time格式转成指定的字符串格式 print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925
print(datetime.date.fromtimestamp(time.time()) ) # 时间戳直接转成日期格式 2016-08-19
print(datetime.datetime.now() )
print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天
print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天
print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时
print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分
c_time = datetime.datetime.now()
print(c_time.replace(minute=3,hour=2)) #时间替换
aaarticlea/png;base64,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" alt="" />
random模块
import random
print
random.random()
print
random.randint(
1
,
2
)
print
random.randrange(
1
,
10
)
生成随机验证码:
import random
checkcode = ''
for i in range(4):
current = random.randrange(0,4)
if current != i:
temp = chr(random.randint(65,90))
else:
temp = random.randint(0,9)
checkcode +=str(temp)
print(checkcode)
OS模块
提供对操作系统进行调用的接口:
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir(
"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 输出用于分割文件路径的字符串
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所指向的文件或者目录的最后修改时间
sys模块
sys.argv 命令行参数
List
,第一个元素是程序本身路径
sys.exit(n) 退出程序,正常退出时exit(
0
)
sys.version 获取Python解释程序的版本信息
sys.maxint 最大的
Int
值
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
sys.stdout.write(
'please:'
)
val
=
sys.stdin.readline()[:
-
1
]
shutil 模块
自定义模块
import
module
from
module.xx.xx
import
xx
from
module.xx.xx
import
xx as rename
from
module.xx.xx
import
*
导入模块其实就是告诉Python解释器去解释那个py文件
- 导入一个py文件,解释器解释该py文件
- 导入一个包,解释器解释该包下的 __init__.py 文件
那么问题来了,导入模块时是根据那个路径作为基准来进行的呢?即:sys.path
import
sys
print
sys.path
结果:
[
'/Users/wupeiqi/PycharmProjects/calculator/p1/pp1'
,
'/usr/local/lib/python2.7/site-packages/setuptools-15.2-py2.7.egg'
,
'/usr/local/lib/python2.7/site-packages/distribute-0.6.28-py2.7.egg'
,
'/usr/local/lib/python2.7/site-packages/MySQL_python-1.2.4b4-py2.7-macosx-10.10-x86_64.egg'
,
'/usr/local/lib/python2.7/site-packages/xlutils-1.7.1-py2.7.egg'
,
'/usr/local/lib/python2.7/site-packages/xlwt-1.0.0-py2.7.egg'
,
'/usr/local/lib/python2.7/site-packages/xlrd-0.9.3-py2.7.egg'
,
'/usr/local/lib/python2.7/site-packages/tornado-4.1-py2.7-macosx-10.10-x86_64.egg'
,
'/usr/local/lib/python2.7/site-packages/backports.ssl_match_hostname-3.4.0.2-py2.7.egg'
,
'/usr/local/lib/python2.7/site-packages/certifi-2015.4.28-py2.7.egg'
,
'/usr/local/lib/python2.7/site-packages/pyOpenSSL-0.15.1-py2.7.egg'
,
'/usr/local/lib/python2.7/site-packages/six-1.9.0-py2.7.egg'
,
'/usr/local/lib/python2.7/site-packages/cryptography-0.9.1-py2.7-macosx-10.10-x86_64.egg'
,
'/usr/local/lib/python2.7/site-packages/cffi-1.1.1-py2.7-macosx-10.10-x86_64.egg'
,
'/usr/local/lib/python2.7/site-packages/ipaddress-1.0.7-py2.7.egg'
,
'/usr/local/lib/python2.7/site-packages/enum34-1.0.4-py2.7.egg'
,
'/usr/local/lib/python2.7/site-packages/pyasn1-0.1.7-py2.7.egg'
,
'/usr/local/lib/python2.7/site-packages/idna-2.0-py2.7.egg'
,
'/usr/local/lib/python2.7/site-packages/pycparser-2.13-py2.7.egg'
,
'/usr/local/lib/python2.7/site-packages/Django-1.7.8-py2.7.egg'
,
'/usr/local/lib/python2.7/site-packages/paramiko-1.10.1-py2.7.egg'
,
'/usr/local/lib/python2.7/site-packages/gevent-1.0.2-py2.7-macosx-10.10-x86_64.egg'
,
'/usr/local/lib/python2.7/site-packages/greenlet-0.4.7-py2.7-macosx-10.10-x86_64.egg'
,
'/Users/wupeiqi/PycharmProjects/calculator'
,
'/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python27.zip'
,
'/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7'
,
'/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin'
,
'/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac'
,
'/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages'
,
'/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk'
,
'/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old'
,
'/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload'
,
'/usr/local/lib/python2.7/site-packages'
,
'/Library/Python/2.7/site-packages'
]
通过os模块可以获取各种目录,例如:
import sys
import os pre_path = os.path.abspath('../')
sys.path.append(pre_path)
开源模块
下载安装有两种方式:
yum
pip
apt-get
...
下载源码
解压源码
进入目录
编译源码 python setup.py build
安装源码 python setup.py install 注:在使用源码安装时,需要使用到gcc编译和python开发环境,所以,需要先执行:
yum install gcc
yum install python
-
devel
或
apt
-
get python
-
dev
安装成功后,模块会自动安装到 sys.path 中的某个目录中,如:
/
usr
/
lib
/
python2.
7
/
site
-
packages
/
paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来现实。
1、下载安装
# pycrypto,由于 paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto
# 下载安装 pycrypto
wget http:
/
/
files.cnblogs.com
/
files
/
wupeiqi
/
pycrypto
-
2.6
.
1.tar
.gz
tar
-
xvf pycrypto
-
2.6
.
1.tar
.gz
cd pycrypto
-
2.6
.
1
python setup.py build
python setup.py install
# 进入python环境,导入Crypto检查是否安装成功
# 下载安装 paramiko
wget http:
/
/
files.cnblogs.com
/
files
/
wupeiqi
/
paramiko
-
1.10
.
1.tar
.gz
tar
-
xvf paramiko
-
1.10
.
1.tar
.gz
cd paramiko
-
1.10
.
1
python setup.py build
python setup.py install
# 进入python环境,导入paramiko检查是否安装成功
#!/usr/bin/env python
#coding:utf-8 import paramiko ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.1.108', 22, 'alex', '123')
stdin, stdout, stderr = ssh.exec_command('df')
print stdout.read()
ssh.close();
import paramiko private_key_path = '/home/auto/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(private_key_path) ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('主机名 ', 端口, '用户名', key) stdin, stdout, stderr = ssh.exec_command('df')
print stdout.read()
ssh.close()
import os,sys
import paramiko t = paramiko.Transport(('182.92.219.86',22))
t.connect(username='wupeiqi',password='123')
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put('/tmp/test.py','/tmp/test.py')
t.close() import os,sys
import paramiko t = paramiko.Transport(('182.92.219.86',22))
t.connect(username='wupeiqi',password='123')
sftp = paramiko.SFTPClient.from_transport(t)
sftp.get('/tmp/test.py','/tmp/test2.py')
t.close()
import paramiko pravie_key_path = '/home/auto/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(pravie_key_path) t = paramiko.Transport(('182.92.219.86',22))
t.connect(username='wupeiqi',pkey=key) sftp = paramiko.SFTPClient.from_transport(t)
sftp.put('/tmp/test3.py','/tmp/test3.py') t.close() import paramiko pravie_key_path = '/home/auto/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(pravie_key_path) t = paramiko.Transport(('182.92.219.86',22))
t.connect(username='wupeiqi',pkey=key) sftp = paramiko.SFTPClient.from_transport(t)
sftp.get('/tmp/test3.py','/tmp/test4.py') t.close()
json & pickle 模块
用于序列化的两个模块
- json,用于字符串 和 python数据类型间进行转换
- pickle,用于python特有的类型 和 python的数据类型间进行转换
Json模块提供了四个功能:dumps、dump、loads、load
pickle模块提供了四个功能:dumps、dump、loads、load
aaarticlea/png;base64,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" alt="" />
import json
data ={
'name':'alex',
'age':25,
'sex':'M'
}
#
# f =open('data.txt','w',encoding='utf-8')
#
# json.dump(data,f)
# f.close() f_r =open('data.txt','r',encoding='utf-8')
data = json.load(f_r)
f_r.close()
print(data['age'])
shelve 模块
shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式
import
shelve
d
=
shelve.
open
(
'shelve_test'
)
#打开一个文件
class
Test(
object
):
def
__init__(
self
,n):
self
.n
=
n
t
=
Test(
123
)
t2
=
Test(
123334
)
name
=
[
"alex"
,
"rain"
,
"test"
]
d[
"test"
]
=
name
#持久化列表
d[
"t1"
]
=
t
#持久化类
d[
"t2"
]
=
t2
d.close()
xml处理模块
xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是xml。
xml的格式如下,就是通过<>节点来区别数据结构的:
<?
xml
version="1.0"?>
<
data
>
<
country
name="Liechtenstein">
<
rank
updated="yes">2</
rank
>
<
year
>2008</
year
>
<
gdppc
>141100</
gdppc
>
<
neighbor
name="Austria" direction="E"/>
<
neighbor
name="Switzerland" direction="W"/>
</
country
>
<
country
name="Singapore">
<
rank
updated="yes">5</
rank
>
<
year
>2011</
year
>
<
gdppc
>59900</
gdppc
>
<
neighbor
name="Malaysia" direction="N"/>
</
country
>
<
country
name="Panama">
<
rank
updated="yes">69</
rank
>
<
year
>2011</
year
>
<
gdppc
>13600</
gdppc
>
<
neighbor
name="Costa Rica" direction="W"/>
<
neighbor
name="Colombia" direction="E"/>
</
country
>
</
data
>
import xml.etree.ElementTree as ET tree = ET.parse("xmltest.xml")
root = tree.getroot()
# print(root.tag)#获取根节点信息
#
# #遍历xml文档
# for child in root:
# print(child.tag,child.attrib)
# for i in child:
# print('\t',i.tag,i.attrib,i.text) #只遍历year节点
#root.iter('country').__next__() for node in root.iter('year'):
print(type(node))
print(node.tag,node.text)
#修改、删除xml文档内容
tree = ET.parse('xmltest2')
root = tree.getroot()
#修改节点
for node in root.iter('year'):
new_year = int(node.text) +1
node.set("updated","yes") tree.write("xmltest2.xml")
# 删除node
for country in root.findall('country'):
rank = int(country.find('rank').text)
if rank > 50:
root.remove(country) tree.write('output.xml') # new_xml = ET.Element("namelist")
# name = ET.SubElement(new_xml, "name", attrib={"enrolled": "yes"})
# age = ET.SubElement(name, "age", attrib={"checked": "no"})
# sex = ET.SubElement(name, "sex")
# sex.text = '33'
# name2 = ET.SubElement(new_xml, "name", attrib={"enrolled": "no"})
# age = ET.SubElement(name2, "age")
# age.text = '19'
#
# et = ET.ElementTree(new_xml) # 生成文档对象
# et.write("test.xml", encoding="utf-8", xml_declaration=True)
#
# ET.dump(new_xml) # 打印生成的格式
PyYAML模块
Python也可以很容易的处理ymal文档格式,只不过需要安装一个模块,参考文档:http://pyyaml.org/wiki/PyYAMLDocumentation
ConfigParser模块
用于生成和修改常见配置文档,当前模块的名称在 python 3.x 版本中变更为 configparser。
来看一个好多软件的常见文档格式如下
[DEFAULT]
ServerAliveInterval
=
45
Compression
=
yes
CompressionLevel
=
9
ForwardX11
=
yes
[bitbucket.org]
User
=
hg
[topsecret.server.com]
Port
=
50022
ForwardX11
=
no
import configparser
config = configparser.ConfigParser()
# config["DEFAULT"] = {'ServerAliveInterval':'45',
# 'Compression':'yes',
# 'CompressionLevel':'9'}
#
# config['bitbucket.org'] = {}
# config['bitbucket.org']['user']='HG'
#
# config['top.server.com'] ={}
# top = config['top.server.com']
# top['Host port'] = '50022'
# top['ForwardX11'] ='yes'
#
# config['DEFAULT']['ForwardX11'] = 'yes'
#
# with open('example.ini','w') as configfile:
# config.write(configfile) config.read('example.ini')
#['example.ini']
print(config.sections())#不显示DEFAULT信息
#['bitbucket.org', 'top.server.com']
sectionname = config.sections()[1]
print(config[sectionname]['host port'])
#打印key,包含DEFAULT
for key in config[sectionname]:
print(key) # ########## 读 ##########
# secs = config.sections()
# print secs
# options = config.options('group2')
# print options # item_list = config.items('group2')
# print item_list # val = config.get('group1','key')
# val = config.getint('group1','key') # ########## 改写 ##########
# sec = config.remove_section('group1')
# config.write(open('i.cfg', "w")) # sec = config.has_section('wupeiqi')
# sec = config.add_section('wupeiqi')
# config.write(open('i.cfg', "w")) # config.set('group2','k1',11111)
# config.write(open('i.cfg', "w")) # config.remove_option('group2','age')
# config.write(open('i.cfg', "w"))
hashlib模块
用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
# import hashlib
# m = hashlib.md5()
# m.update(b'jeb.li')
# print(m.hexdigest()) import hmac
h1 = hmac.new(b'jeb.li')
print('jeb.li hmac with out salt:')
print(h1.hexdigest())
h2= hmac.new(b'jeb.li') h2.update(b'hello')
print(h2.hexdigest())
print('jeb.li hmac with salt(hello):')
print(h2.hexdigest())
import
hmac
h
=
hmac.new(
'wueiqi'
)
h.update(
'hellowo'
)
print
h.hexdigest()
logging模块
很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误、警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,logging的日志可以分为 debug()
, info()
, warning()
, error()
and critical() 5个级别,
下面我们看一下怎么用。
import logging
from logging import handlers
#无format版
# logging.basicConfig(filename='access.log',level=logging.INFO)
#加常见format版
# logging.basicConfig(filename='access.log',level=logging.INFO,
# format='%(asctime)s %(message)s',
# datefmt='%m/%d/%Y %I:%M:%S %p')
#加强format版
# logging.basicConfig(filename='access.log',level=logging.INFO,
# format='%(asctime)s %(message)s %(filename)s %(lineno)d',
# datefmt='%m/%d/%Y %I:%M:%S %p >>:')
#创建logger
logger = logging.getLogger('TEST-LOG')
logger.setLevel(logging.DEBUG)
#创建控制台handler,设置日志级别debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
#创建文件handler,设置日志级别warning
#文件自动截断,按文件大小
fh = handlers.RotatingFileHandler(filename='access.log',maxBytes=10,backupCount=3,encoding='utf-8')
# fh = logging.FileHandler('access.log',encoding='utf-8')
fh.setLevel(logging.WARNING)
#创建formatter
fh_formatter = logging.Formatter('%(asctime)s %(filename)s %(lineno)d -%(levelname)s %(message)s ')
ch_formatter = logging.Formatter('%(asctime)s -%(levelname)s %(message)s ') #加载不同handeler的formatter
ch.setFormatter(ch_formatter)
fh.setFormatter(fh_formatter)
#文件自动截断,按时间
# fh = handlers.TimedRotatingFileHandler(filename=log_file,when="S",interval=5,backupCount=3) #注册不同的handler至logger
logger.addHandler(ch)
logger.addHandler(fh) #应用程序代码:
logger.info('So should this')
logger.debug('This message should go to the log file')
logger.warning("user [alex] attempted wrong password more than 3 times")
logger.error("sercice starts with error")
logger.critical("server is down")
日志格式
%(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 |
用户输出的消息 |
Python 使用logging模块记录日志涉及四个主要类,使用官方文档中的概括最为合适:
logger提供了应用程序可以直接使用的接口;
handler将(logger创建的)日志记录发送到合适的目的输出;
filter提供了细度设备来决定输出哪条日志记录;
formatter决定日志记录的最终输出格式。
logger
每个程序在输出信息之前都要获得一个Logger。Logger通常对应了程序的模块名,比如聊天工具的图形界面模块可以这样获得它的Logger:
LOG=logging.getLogger(”chat.gui”)
而核心模块可以这样:
LOG=logging.getLogger(”chat.kernel”)
Logger.setLevel(lel):指定最低的日志级别,低于lel的级别将被忽略。debug是最低的内置级别,critical为最高
Logger.addFilter(filt)、Logger.removeFilter(filt):添加或删除指定的filter
Logger.addHandler(hdlr)、Logger.removeHandler(hdlr):增加或删除指定的handler
Logger.debug()、Logger.info()、Logger.warning()、Logger.error()、Logger.critical():可以设置的日志级别
handler
handler对象负责发送相关的信息到指定目的地。Python的日志系统有多种Handler可以使用。有些Handler可以把信息输出到控制台,有些Logger可以把信息输出到文件,还有些 Handler可以把信息发送到网络上。如果觉得不够用,还可以编写自己的Handler。可以通过addHandler()方法添加多个多handler
Handler.setLevel(lel):指定被处理的信息级别,低于lel级别的信息将被忽略
Handler.setFormatter():给这个handler选择一个格式
Handler.addFilter(filt)、Handler.removeFilter(filt):新增或删除一个filter对象
每个Logger可以附加多个Handler。接下来我们就来介绍一些常用的Handler:
1) logging.StreamHandler
使用这个Handler可以向类似与sys.stdout或者sys.stderr的任何文件对象(file object)输出信息。它的构造函数是:
StreamHandler([strm])
其中strm参数是一个文件对象。默认是sys.stderr
2) logging.FileHandler
和StreamHandler类似,用于向一个文件输出日志信息。不过FileHandler会帮你打开这个文件。它的构造函数是:
FileHandler(filename[,mode])
filename是文件名,必须指定一个文件名。
mode是文件的打开方式。参见Python内置函数open()的用法。默认是’a',即添加到文件末尾。
3) logging.handlers.RotatingFileHandler
这个Handler类似于上面的FileHandler,但是它可以管理文件大小。当文件达到一定大小之后,它会自动将当前日志文件改名,然后创建
一个新的同名日志文件继续输出。比如日志文件是chat.log。当chat.log达到指定的大小之后,RotatingFileHandler自动把
文件改名为chat.log.1。不过,如果chat.log.1已经存在,会先把chat.log.1重命名为chat.log.2。。。最后重新创建
chat.log,继续输出日志信息。它的构造函数是:
RotatingFileHandler( filename[, mode[, maxBytes[, backupCount]]])
其中filename和mode两个参数和FileHandler一样。
maxBytes用于指定日志文件的最大文件大小。如果maxBytes为0,意味着日志文件可以无限大,这时上面描述的重命名过程就不会发生。
backupCount用于指定保留的备份文件的个数。比如,如果指定为2,当上面描述的重命名过程发生时,原有的chat.log.2并不会被更名,而是被删除。
4) logging.handlers.TimedRotatingFileHandler
这个Handler和RotatingFileHandler类似,不过,它没有通过判断文件大小来决定何时重新创建日志文件,而是间隔一定时间就
自动创建新的日志文件。重命名的过程与RotatingFileHandler类似,不过新的文件不是附加数字,而是当前时间。它的构造函数是:
TimedRotatingFileHandler( filename [,when [,interval [,backupCount]]])
其中filename参数和backupCount参数和RotatingFileHandler具有相同的意义。
interval是时间间隔。
when参数是一个字符串。表示时间间隔的单位,不区分大小写。它有以下取值:
S 秒
M 分
H 小时
D 天
W 每星期(interval==0时代表星期一)
midnight 每天凌晨
文件自动截断:
import logging from logging import handlers logger = logging.getLogger(__name__) log_file = "timelog.log"
#fh = handlers.RotatingFileHandler(filename=log_file,maxBytes=10,backupCount=3)
fh = handlers.TimedRotatingFileHandler(filename=log_file,when="S",interval=5,backupCount=3) formatter = logging.Formatter('%(asctime)s %(module)s:%(lineno)d %(message)s') fh.setFormatter(formatter) logger.addHandler(fh) logger.warning("test1")
logger.warning("test12")
logger.warning("test13")
logger.warning("test14")
re模块
'.'
默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
'^'
匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r
"^a"
,
"\nabc\neee"
,flags
=
re.MULTILINE)
'$'
匹配字符结尾,或e.search(
"foo$"
,
"bfoo\nsdfsf"
,flags
=
re.MULTILINE).group()也可以
'*'
匹配
*
号前的字符
0
次或多次,re.findall(
"ab*"
,
"cabb3abcbbac"
) 结果为[
'abb'
,
'ab'
,
'a'
]
'+'
匹配前一个字符
1
次或多次,re.findall(
"ab+"
,
"ab+cd+abb+bba"
) 结果[
'ab'
,
'abb'
]
'?'
匹配前一个字符
1
次或
0
次
'{m}'
匹配前一个字符m次
'{n,m}'
匹配前一个字符n到m次,re.findall(
"ab{1,3}"
,
"abb abc abbcbbb"
) 结果
'abb'
,
'ab'
,
'abb'
]
'|'
匹配|左或|右的字符,re.search(
"abc|ABC"
,
"ABCBabcCD"
).group() 结果
'ABC'
'(...)'
分组匹配,re.search(
"(abc){2}a(123|456)c"
,
"abcabca456c"
).group() 结果 abcabca456c
'\A'
只从字符开头匹配,re.search(
"\Aabc"
,
"alexabc"
) 是匹配不到的
'\Z'
匹配字符结尾,同$
'\d'
匹配数字
0
-
9
'\D'
匹配非数字
'\w'
匹配[A
-
Za
-
z0
-
9
]
'\W'
匹配非[A
-
Za
-
z0
-
9
]
's'
匹配空白字符、\t、\n、\r , re.search(
"\s+"
,
"ab\tc1\n3"
).group() 结果
'\t'
'(?P<name>...)'
分组匹配 re.search(
"(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})"
,
"371481199306143242"
).groupdict(
"city"
) 结果{
'province'
:
'3714'
,
'city'
:
'81'
,
'birthday'
:
'1993'
}
re.match 从头开始匹配
re.search 匹配包含
re.findall 把所有匹配到的字符放到以列表中的元素返回
re.split 以匹配到的字符当做列表分隔符
re.sub 匹配字符并替换
与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。同样,匹配一个数字的"\\d"可以写成r"\d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。
re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
M(MULTILINE): 多行模式,改变
'^'
和
'$'
的行为(参见上图)
S(DOTALL): 点任意匹配模式,改变
'.'
的行为