Python_常用模块
一、日志:Logging
import loggingfmt = '%(asctime)s - %(filename)s:%(lineno)s - %(name)s - %(message)s'
# 时间-文件名:行数-logger名-日志信息logging.basicConfig(level=logging.DEBUG, filename='testLog.log', format=fmt)
log = logging.getLogger('testLog')
log.debug('Starting program!')
# 2017-12-08 14:51:13,420 - Log.py:11 - testLog - Starting program!
二、配置文件:ConfigParser
标准库模块ConfigParser,它的作用是对配置文件使用适当的标准格式。需要使用[files]或者[colors]这样的数据头将配置文件划分为几个区段
from ConfigParser import SafeConfigParserconfig = SafeConfigParser()# 读取配置文件,当配置文件不存在时会自动创建
config.read('my.conf')# 如果没有section,则先创建
if not config.has_section('redis'):config.add_section('redis')
if not config.has_section('mysql'):config.add_section('mysql')# 设置或者更新值
config.set('redis', 'host', '192.168.6.188')
config.set('redis', 'ip', '22121')
config.set('mysql', 'ip', '192.168.6.186')# 将更新写入文件
with open('my.conf', 'w') as c:config.write(c)# 获取需要的区段内容
host = config.get('mysql', 'ip')
print host
三、对象串行化:cPickle
pickle模块实现了一个算法可以将一个任意的Python对象转换为一系列字节。这个过程也称为串行化对象。表示对象的字节流可以传输或存储,然后重新构造来创建相同性质的新对象。cPickle用C实现的同样算法,比pickle快数倍。
import cPicklemap1 = {'name': 'regan', 'age': 24, 'gender': 'male'}# 写pkl文件
with open('my.pkl', 'w') as p:cPickle.dump(map1, p)# 读pkl文件
with open('my.pkl', 'r') as p:map2 = cPickle.load(p)print map2# {'gender': 'male', 'age': 24, 'name': 'regan'}
四、路径:os.path
import os, sysrealpath = os.path.realpath(__file__) # __file__代表当前文件,realpath()得到绝对路径
dirname = os.path.dirname(realpath) # dirname()将绝对路径进行分割,得到当前文件所在的目录
ddirname = os.path.dirname(dirname) # 将dirname进行分割,得到当前文件所在目录的上层目录
sys.path.append(ddirname)
# sys.path是一个列表,保存了所有与当前文件相关的路径,将ddirname加入其中以便系统定位当前文件所在目录的父目录configpath = os.path.join(ddirname, 'basic2', 'Map.py')
# 使用正确的分隔符将数个路径连接起来(比如在UNIX内使用/等)。os.makedirs('foo/bar/baz')
# 在当前的目录中创建foo目录,然后在foo中创建bar目录,最后在bar目录内创建baz。如果所有目录都存在,则会引发一个异常print os.path.isdir(__file__) # False, 检查给定的路径是否是目录(即目录是否存在)
print os.path.isdir(ddirname) # True
五、时间:Time
import time# 日期可以用实数,或者是包含有9个整数的元组。比如,元组:(2017,9,29,21,35,00,4,191,0)
# time() 当前时间(新纪元开始后的秒数)
print time.time() # 1506692473.2# 函数asctime()将当前时间格式化为字符串
print time.asctime() # Fri Sep 29 21:36:10 2017
print time.asctime((2017, 9, 29, 21, 35, 00, 4, 191, 0)) # 将时间元组转换为字符串# localtime(secs) 将秒数转换为日期元组,以本地时间为准
print time.localtime(1493464)
# time.struct_time(tm_year=1970, tm_mon=1, tm_mday=18, tm_hour=14, tm_min=51, tm_sec=4, tm_wday=6, tm_yday=18, tm_isdst=0)# mktime(tuple) 将时间元组转换为用秒计的本地时间
print time.mktime((2017, 9, 29, 21, 35, 00, 4, 191, 0)) # 1506692100.0# sleep(secs) 休眠secs秒
time.sleep(2)# strptime(string,[format]) 将字符串解析为时间元组
from datetime import datetime
print datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 2017-12-08 16:38:29, 将time格式化为字符串
d = datetime.strptime('2012-03-01 12:06:23', '%Y-%m-%d %H:%M:%S') # 2012-03-01 12:06:23, 将字符串转化为指定格式的time
print d.date() # 2012-03-01
print d.day # 1
六、文件操作:Open
打开文件:open(file=,mode=,buffering=)
文件模式mode: r 读 ; w 写 ; + 读/写 ; a 追加模式 ; b 二进制模式
参数’rb’可以用来读取一个二进制文件。
缓冲:buffer
如果参数是0 (或者是False), I/O 就是无缓冲的(所有的读写操作都直接针对硬盘)
如果是1(或者是True), I/O 就是有缓冲的(意味着python使用内存来代替硬盘,让程序更快,只有使用flush或者close时才会更新硬盘上的数据)。
大于1的数字代表缓冲区的大小(单位是字节),-1 (或者是任何负数)代表使用默认的缓冲区大小。
with open('my.txt', 'a', -1) as test:test.write('regan!\n') # 写一行test.writelines(['lily!\n', 'lucy!\n']) # 写多行with open('my.txt', 'r') as test:print test.readline() # 每次读取一行内容test.seek(0) # 将偏移量移动到文件开头。seek(offset,whence),whence默认为0,即偏移量是从文件开头计算。1表示相对于当前位置的移动,2表示相对于文件结尾的移动。print test.readlines() # 读取所有内容,返回列表。['hello regan!\n', 'hello regan!\n']# 使用fileinput实现懒惰行迭代
# 在需要对一个非常大的文件进行迭代行的操作肘, readlines会占用太多的内存。这个时候可以使用while循环和readline方法来替代。
import fileinputfor line in fileinput.input('my.txt'):print line
七、异常:Exception
① raise , 手动抛出异常中断程序
def myExcept(name):if name != 'regan':raise Exception('your name is not regan , please try agin!')myExcept('lucy') # 将输出: Exception: your name is not regan , please try agin!
② 捕捉异常
# 如果需要用一个块捕捉多个类型异常,那么可以将它们作为元组列出
try:1 / 0
except (AssertionError, ZeroDivisionError, BytesWarning):pass# 捕捉所有异常,并打印
try:1 / 0
except Exception, e:print e # integer division or modulo by zero# 如果希望在except子句中访问异常对象本身,可以使用两个参数(注意,就算要捕捉到多个异常,也只需向except子句提供一个参数一一一个元组)。
try:1 / 0
except (AssertionError, ZeroDivisionError, BytesWarning), e:print e # integer division or modulo by zero
③ else子句:如果未发生异常,则执行else子句内容。
try:1 / 7
except Exception, e:print e
else:print 'there has some plan !' # there has some error !
④ finally子句
try:1 / 0
except Exception, e:print e
finally:print 'ending!' # ending!
# finally模块一定会被执行,因此可用于关闭连接等重要的工作
八、Md5
计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。
import hashlib, os, sysdir = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.dirname(dir))
① 求字符串的MD5
rawString = u'被用于计算的原始字符串'
md5 = hashlib.md5(rawString.encode('utf8')).hexdigest()
print(md5)
② 求文件MD5
filePath = os.path.join(dir, 'testMD5.txt')
with open(filePath, 'rb') as f:md5 = hashlib.md5(f.read()).hexdigest()print(md5)
九、随机数:random
如果需要真的随机性,应该使用OS模块的urandom函数.
random模块内的SystemRandom类也是基于同种功能,可以让数据接近真正的随机性。
import random
① random() 返回O到1之间的随机实数n,其中0< n <= 1
print random.random() # 0.347799216277
② getrandbits() 以长整型形式返回给定的位数(二进制数)。
如果处理的是真正的随机事务(比如加密),这个函数尤为有用。
print random.getrandbits(3) # 6
③ uniform(a,b) 提供两个数值参数a和b,返回在a~b的随机(平均分布的)实数n。
所以,比如需要随机的角度值,可以使用uniform(0.360)。
print random.uniform(0, 360) # 78.2772699052
④ randrange([start],stop. [step]) 返回range(start.stop.step)中的随机数
print random.randrange(5, 100, 8) # 77
⑤ choice() 从给定序列中(均一地)选择随机元素。
print random.choice([2, 45, 56, 23, 8]) # 23
print random.choice(['regan', 'age', 'hah']) # regan
⑥ sample从给定序列中(均一地)选择给定数目的元素,同时确保元素互不相同。
print random.sample([1, 2, 3, 45, 6], 2) # [1, 2]
”’
十、正则:Re
import re
① compile() 将正则表达式(以字符串书写的)转换为模式对象,可以实现更有效率的匹配
module = re.compile('regan*', flags=0)
② search() 会在给定字符串中寻找第一个匹配给定正则表达式的子字符串。一但找到子字符串,函数就会返回MatchObject(值为True ),否则返回None(值为False )。
print re.search(module, 'helloreganlucy') # <_sre.SRE_Match object at 0x000000000465A510>
③ match() 会在给定字符串的开头匹配正则表达式。
print re.match('p', 'python') # <_sre.SRE_Match object at 0x0000000004A1A510>
print re.match('p', 'www.python.com') # None
④ split() 会根据模式的匹配项来分割字符串。它类似于字符串方法split ,不过是用完整的正则表达式代替了固定的分隔符字符串。
test = 'regan.lucy...age.name'
print re.split('[. ]+', test, maxsplit=2) # ['regan', 'lucy', 'age.name']
print re.split('[. ]+', test, maxsplit=3) # ['regan', 'lucy', 'age', 'name']
⑤ findall() 以列表形式返回给定模式的所有匹配项。比如,要在字符串中查找所有的单词,可以像下面这么做:
print re.findall('a..', test) # ['an.', 'age', 'ame']
⑥ sub() 使用给定的替换内容将匹配模式的子字符串(最左端并且非重叠的子字符串)替换掉
print re.sub('a.', 'regan', test, 2) # regregan.lucy...regane.name
⑦ escape() 对字符串中所有可能被解释为正则运算符的字符进行转义
print re.escape('www.python.org') # www\.python\.org
⑧ 匹配对象和组
组就是放置在圆括号内的子模式。组的序号取决于它左侧的括号数。组0就是整个模式
‘There (was a (wee) (cooper)) who (lived in Fyfe)’
包含下面这些组:
0 There was a wee cooper who lived in Fyfe
1 was a wee cooper
2 wee
3 cooper
4 lived in Fyfe
m = re.match(r'www\.(.*)\..{3}','www.python.org')
print m.group(1) # python
print m.start(1) # 4
print m.end(1) # 10
print m.span(1) #(4,10)
十一、套接字:Socket
套接字主要是两个程序之间的“信息通道”。程序可能(通过网络连接)分布在不同的计算机上,通过套接字相互发送信息。
套接字包括两个:服务器套接字和客户机套接字。创建一个服务器套接字后,让它等待连接。这样它就在某个网络地址处 (IP地址和一个端口号的组合)监听。
处理客户端套接字通常比处理服务器端套接字容易,因为服务器必须准备随时处理客户端的连接,同时还要处理多个连接,而客户机只是简单地连接,完成事务,断开连接。
一个套接字就是一个socket模块中的socket类的实例。它的实例化需要3个参数:
第1个参数是地址族(默认是socket.AF_!NET) ;
第2个参数是流(socket.SOCK_STREAM,默认值)或数据报 (socket. SOCK _DGRAI叶)套接字
第3个参数是使用的协议(默认是0,使用默认值即可)。
对于一个普通的套接字,不需要提供任何参数。
服务器端套接宇使用bind方法后,再调用listen方法去监听这个给定的地址。
客户端套接字使用connect方在去连接到服务器在connect方法中使用的地址与bind方法中的地址相同(在服务器端,能实现很多功能,比如使用函数socket.gethostname得到当前主机名)。在这种情况下,一个地址就是一个格式为(host, port)的元组,
listen方法只有一个参数,即服务器未处理的连接的长度(即允许排队等待的连接数目,这些连接在停止接收之前等待接收)。
服务器端套接字开始监听后,它就可以接受客户端的连接。这个步骤使用accept方法来完成。
这个方法会阻塞(等待)直到客户端连接,然后该方法就返回一个格式为(client, address) 的元组, client是一个客户端套接字, address是一个前面解释过的地址。
套接字有两个方法: send和recv (用于接收),用于传输数据。可以使用字符串参数调用send 以发送数据,用一个所需的(最大)字节数做参数调用recv来接收数据。如果不能确定使用哪个数字比较好,那么1024是个很好的选择。
# 一个小型服务器
class Service:import sockets = socket.socket()host = socket.gethostname()port = 1234s.bind((host, port))s.listen(5)while True:c, addr = s.accept()print 'Got connection from ', addrc.send('Thanks for your connecting!')c.close()class Client:import sockets = socket.socket()host = socket.gethostname()port = 1234s.connect(host, port)print s.recv(1024)
Python_常用模块相关推荐
- ansible自动化运维(二)——环境部署及常用模块的使用
实验环境 主机 ip server1(主控端) 172.25.6.1 server2(节点) 172.25.6.2 server3(节点) 172.25.6.3 一.环境部署 ansible的配置文件 ...
- 实战篇一 python常用模块和库介绍
# -_-@ coding: utf-8 -_-@ -- Python 常用模块和库介绍 第一部分:json模块介绍 import json 将一个Python数据结构转换为JSON: dict_ = ...
- python常用模块大全总结-常用python模块
广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. python常用模块什么是模块? 常见的场景:一个模块就是一个包含了py ...
- 对于python来说、一个模块就是一个文件-python常用模块
python常用模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用pyt ...
- python常用模块之shelve模块
python常用模块之shelve模块 shelve模块是一个简单的k,v将内存中的数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据类型 我们在上面讲json.pickle ...
- Python常用模块——目录
Python常用模块学习 Python模块和包 Python常用模块time & datetime &random 模块 Python常用模块os & sys & sh ...
- Day05 - Python 常用模块
1. 模块简介 模块就是一个保存了 Python 代码的文件.模块能定义函数,类和变量.模块里也能包含可执行的代码. 模块也是 Python 对象,具有随机的名字属性用来绑定或引用. 下例是个简单的模 ...
- Ansible基本使用及常用模块详解
一.ansible基本使用 定义主机组 定义被管理节点列表的文件/etc/ansible/hosts,在定义被管理节点的时候,可以单独基于主机做定义,也可以将多个主机定义成一个主机组. 在上篇博文安装 ...
- js foreach用法_使用 nodejs 写爬虫(一): 常用模块和 js 语法
本篇是使用 nodejs 写爬虫系列教程的第一篇, 介绍了使用 nodejs 写爬虫过程中常用的模块和一些必须掌握的 js 语法 <!-- more --> 常用模块 常用模块有以下几个: ...
最新文章
- DEV开发之控件NavBarControl
- 【并查集】并查集的基本操作总结
- Condition接口详解
- 如何攻克目标检测?百度全球顶级会议双料冠军团队有话说!
- linux 查redis状态_干货:用案例代码详解Redis中的事件驱动模型
- excel的宏与VBA入门(三)——流程控制
- 大年初三闪光灯下的树和远处的花炮
- 【Mac技巧】怎样隐藏电脑Dock栏
- Sublime Merge for Mac(git客户端软件)
- python 文件上传 web_Python WebDriver 文件上传(一)
- .net html5 微信支付接口,解析微信支付的实现方法(.NET版)
- MFI认证——苹果MFI账号申请
- Request Headers请求头和Response Headers响应头,有啥区别呢?
- Python基础编程题
- 应届生面试这样准备,最能展现自己优势!
- android按钮被遮住,解决Android 虚拟按键遮住了页面内容的问题
- ubuntu16.04 护眼神器Redshift
- 实验三:凸包(输入点坐标计算凸包坐标)
- c 递归实现谢宾斯基三角形
- 洛谷P2713 罗马游戏
热门文章
- IC卡、ID卡、M1卡、射频卡的区别是什么
- java二级考试试题题型有哪些_哪里有计算机二级题库?计算机二级考试题型有哪些?...
- 二、Python3 基本数据类型
- 用html表格形式制作个人信息,CSS写的简单个人信息登记表格示例
- RationalDMIS 7.1 矢量点自动“获得IJK“功能。
- 在python程序中数据的来源可以是-python起源,变量,用户交互,流程语句
- 静态资源交替成功失败500
- SD-NOIP2016游记
- 英国电信选择Ubuntu OpenStack作为其5G核心大脑
- 奇梦达产能削减四分之三