Python 小手册 - 常用模块
提示:本文档以
python2.7
版本为例
编码
bash64
>>> import base64
>>> dir(base64)
['EMPTYSTRING', 'MAXBINSIZE', 'MAXLINESIZE', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_b32alphabet', '_b32rev', '_b32tab', '_translate', '_translation', '_x', 'b16decode', 'b16encode', 'b32decode', 'b32encode', 'b64decode', 'b64encode', 'binascii', 'decode', 'decodestring', 'encode', 'encodestring', 'k', 're', 'standard_b64decode', 'standard_b64encode', 'struct', 'test', 'test1', 'urlsafe_b64decode', 'urlsafe_b64encode', 'v']
>>> base64.b64encode('hello,base64')
'aGVsbG8sYmFzZTY0'
>>> base64.b64decode('aGVsbG8sYmFzZTY0')
'hello,base64'
>>> base64.urlsafe_b64decode('abcd--__')
'i\xb7\x1d\xfb\xef\xff'
>>> base64.b64encode('i\xb7\x1d\xfb\xef\xff')
'abcd++//'
>>> base64.urlsafe_b64encode('i\xb7\x1d\xfb\xef\xff')
'abcd--__'
md5
>>> import md5
>>> hash = md5.new()
>>> hash.update('admin')
>>> print hash.hexdigest()
21232f297a57a5a743894a0e4a801fc3
... import hashlib
>>> hash = hashlib.md5()
>>> hash.update('admin')
>>> print hash.hexdigest()
21232f297a57a5a743894a0e4a801fc3
sha256
>>> from Crypto.Hash import SHA256
>>> hash = SHA256.new()
>>> hash.update('message')
>>> hash.digest()
'\xabS\n\x13\xe4Y\x14\x98+y\xf9\xb7\xe3\xfb\xa9\x94\xcf\xd1\xf3\xfb"\xf7\x1c\xea\x1a\xfb\xf0+F\x0cm\x1d'
序列化和json
>>> import pickle
>>>
>>> d = {'a':1,'b':2}
>>> s = pickle.dumps(d)
>>>
>>> pickle.dump(d,open('b.txt','w'))
>>> pickle.load(open('b.txt','r'))
{'a': 1, 'b': 2}
>>> import json
>>>
>>> j = json.dumps(d)
>>> print j
{"a": 1, "b": 2}
>>>
>>> json.dump(d,open('c.txt','w'))
>>> json.load(open('c.txt','r'))
{u'a': 1, u'b': 2}
os模块
相对sys模块 os模块更为底层 os._exit() try无法抓取
- os.popen(‘id’).read() # 执行系统命令得到返回结果
- os.system() # 得到返回状态 返回无法截取
- os.name # 返回系统平台 Linux/Unix用户是’posix’
- os.getenv() # 读取环境变量
- os.putenv() # 设置环境变量
- os.getcwd() # 当前工作路径
- os.chdir() # 改变当前工作目录
- os.environ[‘HOME’] # 查看系统环境变量
- os.statvfs(“/”) # 获取磁盘信息
文件处理
- os.mkfifo()/mknod() # 创建命名管道/创建文件系统节点
- os.remove()/unlink() # 删除文件
- os.rename()/renames() # 重命名文件
- os.stat() # 返回文件信息
- os.symlink() # 创建符号链接
- os.utime() # 更新时间戳
- os.tmpfile() # 创建并打开(‘w+b’)一个新的临时文件
- os.walk(‘/root/’) # 遍历目录树下的所有文件名
- oct(os.stat(‘th1.py’).st_mode)[-3:] # 查看文件权限
目录/文件夹
- os.chdir()/fchdir() # 改变当前工作目录/通过一个文件描述符改变当前工作目录
- os.chroot() # 改变当前进程的根目录
- os.listdir() # 列出指定目录的文件
- os.getcwd()/getcwdu() # 返回当前工作目录/功能相同,但返回一个unicode对象
- os.mkdir()/makedirs() # 创建目录/创建多层目录
- os.rmdir()/removedirs() # 删除目录/删除多层目录
访问/权限
- os.saccess() # 检验权限模式
- os.chmod(‘txt’,eval(“0777”)) # 改变权限模式
- os.chown()/lchown() # 改变owner和groupID功能相同,但不会跟踪链接
- os.umask() # 设置默认权限模式
文件描述符操作
- os.open() # 底层的操作系统open(对于稳健,使用标准的内建open()函数)
- os.read()/write() # 根据文件描述符读取/写入数据 按大小读取文件部分内容
- os.dup()/dup2() # 复制文件描述符号/功能相同,但是复制到另一个文件描述符
设备号
- os.makedev() # 从major和minor设备号创建一个原始设备号
- os.major()/minor() # 从原始设备号获得major/minor设备号
os.path模块
- os.path.expanduser(‘~/.ssh/key’) # 家目录下文件的全路径
分隔
- os.path.basename() # 去掉目录路径,返回文件名
- os.path.dirname() # 去掉文件名,返回目录路径
- os.path.join() # 将分离的各部分组合成一个路径名
- os.path.spllt() # 返回(dirname(),basename())元组
- os.path.splitdrive() # 返回(drivename,pathname)元组
- os.path.splitext() # 返回(filename,extension)元组
信息
- os.path.getatime() # 返回最近访问时间
- os.path.getctime() # 返回文件创建时间
- os.path.getmtime() # 返回最近文件修改时间
- os.path.getsize() # 返回文件大小(字节)
查询
- os.path.exists() # 指定路径(文件或目录)是否存在
- os.path.isabs() # 指定路径是否为绝对路径
- os.path.isdir() # 指定路径是否存在且为一个目录
- os.path.isfile() # 指定路径是否存在且为一个文件
- os.path.islink() # 指定路径是否存在且为一个符号链接
- os.path.ismount() # 指定路径是否存在且为一个挂载点
- os.path.samefile() # 两个路径名是否指向同一个文件
子进程
- os.fork() # 创建子进程,并复制父进程所有操作 通过判断pid = os.fork() 的pid值,分别执行父进程与子进程操作,0为子进程
- os.wait() # 等待子进程结束
跨平台os模块属性
- os.linesep # 用于在文件中分隔行的字符串
- os.sep # 用来分隔文件路径名字的字符串
- os.pathsep # 用于分割文件路径的字符串
- os.curdir # 当前工作目录的字符串名称
- os.pardir # 父目录字符串名称
磁盘空间
import os
disk = os.statvfs("/")
disk.f_bsize # 块大小
disk.f_blocks # 块总数
disk.f_bfree # 剩余块总数
disk.f_bavail # 非root用户的剩余块数 由于权限小会比root的剩余块总数小 用这个做报警会更准确
disk.f_files # 总节点数
disk.f_ffree # 剩余节点数
disk.f_favail # 非root用户的剩余节点数
disk.f_bsize * disk.f_bavail / 1024 / 1024 / 1024 # 非root用户剩余空间大小G
disk.f_bsize * disk.f_blocks / 1024 / 1024 / 1024 # 分区空间总大小
去除文件中的换行符
import os
for i in file(r'c:\1.txt').readlines():
a=i.strip(os.linesep)
列出当前目录下的所有目录
[x for x in os.listdir('.') if os.path.isdir(x)]
列出当前目录下的所有python文件
[x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py']
sys
- sys.argv # 取参数列表
- sys.exit(2) # 退出脚本返回状态 会被try截取
- sys.exc_info() # 获取当前正在处理的异常类
- sys.version # 获取Python解释程序的版本信息
- sys.maxint # 最大的Int值 9223372036854775807
- sys.maxunicode # 最大的Unicode值
- sys.modules # 返回系统导入的模块字段,key是模块名,value是模块
- sys.path # 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
- sys.platform # 返回操作系统平台名称
- sys.stdout # 标准输出
- sys.stdin # 标准输入
- sys.stderr # 错误输出
- sys.exec_prefix # 返回平台独立的python文件安装的位置
- sys.stdin.readline() # 从标准输入读一行
- sys.stdout.write(“a”) # 屏幕输出a
- sys.path.insert(1, os.path.join(sys.path[0], ‘/opt/script/’)) # 将/opt/script/目录加入环境变量,可导入相应模块
time
UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。 DST(Daylight Saving Time)即夏令时。是一种为节约能源而人为规定地方时间的制度,一般在天亮早的夏季人为将时间提前一小时。
time有2种时间表示形式
- 时间戳表示法,即以整型或浮点型表示的是一个以秒为单位的时间间隔。这个时间的基础值是从1970年的1月1号零点开始算起。
- 元组格式表示法,即一种Python的数据结构表示。这个元组有9个整型内容。分别表示不同的时间含义。
year (four digits, e.g. 1998)
month (1-12)
day (1-31)
hours (0-23)
minutes (0-59)
seconds (0-59)
weekday (0-6, Monday is 0)
Julian day (day in the year, 1-366)
DST (Daylight Savings Time) flag (-1, 0 or 1) ## 夏令时格式,0:表示正常格式,1:表示为夏令时格式,-1:表示根据当前的日期时间格式来判定
- time.timezone # 当地时间与标准UTC时间的误差,以秒计
- time.altzone # 当地夏令时时间与标准UTC时间的误差,以秒计
- time.daylight # 当地时间是否反映夏令时,默认为0
- time.tzname # 关于(标准时区名称, 夏令时时区名称)的元组
- time.time() # 返回当前时间戳,浮点数形式。不接受参数
- time.clock() # 返回当前程序的cpu执行时间。unix系统始终返回全部运行时间;而windows从第二次开始都是以第一次调用此函数时的时间戳作为基准,而不是程序开始时间为基准。不接受参数。
- time.sleep() # 延迟一个时间段,接受整型、浮点型。
- time.gmtime() # 将时间戳转换为UTC时间元组格式。接受一个浮点型时间戳参数,其默认值为当前时间戳。
- time.localtime() # 将时间戳转换为本地时间元组格式。接受一个浮点型时间戳参数,其默认值为当前时间戳。
- time.asctime() # 将时间元组格式转换为字符串形式。接受一个时间元组,其默认值为localtime()返回值
- time.ctime() # 将时间戳转换为字符串。接受一个时间戳,其默认值为当前时间戳。等价于asctime(localtime(seconds))
- time.mktime() # 将本地时间元组转换为时间戳。接受一个时间元组,必选。
- time.strftime() # 将时间元组以指定的格式转换为字符串形式。接受字符串格式化串、时间元组。时间元组为可选,默认为localtime()
- time.strptime() # 将指定格式的时间字符串解析为时间元组,strftime()的逆向过程。接受字符串,时间格式2个参数,都是必选。
- time.tzset() # 改变本地时区。
时间字符串支持的格式符号
格式 | 含义 |
---|---|
%a | 本地(locale)简化星期名称 |
%A | 本地完整星期名称 |
%b | 本地简化月份名称 |
%B | 本地完整月份名称 |
%c | 本地相应的日期和时间表示 |
%d | 一个月中的第几天(01 - 31) |
%H | 一天中的第几个小时(24小时制,00 - 23) |
%I | 第几个小时(12小时制,01 - 12) |
%j | 一年中的第几天(001 - 366) |
%m | 月份(01 - 12) |
%M | 分钟数(00 - 59) |
%p | 本地am或者pm的相应符 |
%S | 秒(01 - 61) |
%U | 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。 |
%w | 一个星期中的第几天(0 - 6,0是星期天) |
%W | 和%U基本相同,不同的是%W以星期一为一个星期的开始。 |
%x | 本地相应日期 |
%X | 本地相应时间 |
%y | 去掉世纪的年份(00 - 99) |
%Y | 完整的年份 |
%Z | 时区的名字(如果不存在为空字符) |
%% | ‘%’字符 |
>>> import time
>>> time.time()
1469156306.797714
>>> time.mktime(time.localtime())
1469156317.0
>>> time.timezone
-28800
>>> time.altzone
-28800
>>> time.daylight
0
>>> time.tzname
('CST', 'CST')
>>> time.strptime('2014-11-11','%Y-%m-%d')
time.struct_time(tm_year=2014, tm_mon=11, tm_mday=11, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=315, tm_isdst=-1)
>>> time.localtime()
time.struct_time(tm_year=2016, tm_mon=7, tm_mday=22, tm_hour=11, tm_min=7, tm_sec=37, tm_wday=4, tm_yday=204, tm_isdst=0)
>>> time.gmtime()
time.struct_time(tm_year=2016, tm_mon=7, tm_mday=22, tm_hour=3, tm_min=7, tm_sec=53, tm_wday=4, tm_yday=204, tm_isdst=0)
>>> time.strftime('%Y-%m-%d', time.localtime())
'2016-07-22'
>>> time.time()
1469157121.0396891
>>> time.ctime(time.time())
'Fri Jul 22 11:12:08 2016'
>>> time.strptime(time.ctime(time.time()))
time.struct_time(tm_year=2016, tm_mon=7, tm_mday=22, tm_hour=11, tm_min=12, tm_sec=56, tm_wday=4, tm_yday=204, tm_isdst=-1)
>>> time.strftime('%Y-%m-%d %H:%M:%S', time.strptime(time.ctime(time.time())))
'2016-07-22 11:15:09'
datetime
- datetime.date:表示日期的类。常用的属性有year, month, day
- datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond
- datetime.datetime:表示日期时间
- datetime.timedelta:表示时间间隔,即两个时间点之间的长度
>>> import datetime
>>> dir(datetime)
['MAXYEAR', 'MINYEAR', '__doc__', '__file__', '__name__', '__package__', 'date', 'datetime', 'datetime_CAPI', 'time', 'timedelta', 'tzinfo']
>>> datetime.MAXYEAR
9999
>>> datetime.MINYEAR
1
>>> print datetime.datetime.now()
2016-07-22 11:19:57.080741
>>> print datetime.datetime.now()- datetime.timedelta(days=5)
2016-07-17 11:20:29.847780
>>> print datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
2016-07-22 11:20:50
timestamp转换为datetime
>>> from datetime import datetime
>>> t = 1429417200.0
>>> print datetime.fromtimestamp(t)
2015-04-19 12:20:00
timestamp也可以直接被转换到UTC标准时区的时间:
>>> from datetime import datetime
>>> t = 1429417200.0
>>> print datetime.fromtimestamp(t) # 本地时间
2015-04-19 12:20:00
>>> print datetime.utcfromtimestamp(t) # UTC时间
2015-04-19 04:20:00
str转换为datetime
>>> from datetime import datetime
>>> cday = datetime.strptime('2015-6-1 18:19:59', '%Y-%m-%d %H:%M:%S')
>>> print cday
2015-06-01 18:19:59
datetime转换为str
>>> from datetime import datetime
>>> now = datetime.now()
>>> print now.strftime('%a, %b %d %H:%M')
Mon, May 05 16:28
datetime加减
>>> from datetime import datetime, timedelta
>>> now = datetime.now()
>>> now
datetime.datetime(2015, 5, 18, 16, 57, 3, 540997)
>>> now + timedelta(hours=10)
datetime.datetime(2015, 5, 19, 2, 57, 3, 540997)
>>> now - timedelta(days=1)
datetime.datetime(2015, 5, 17, 16, 57, 3, 540997)
>>> now + timedelta(days=2, hours=12)
datetime.datetime(2015, 5, 21, 4, 57, 3, 540997)